Log4j的常规应用

Log4j项目中一直在用,但是由于太基本的一个功能了,有时不太关注而导致一些错误或紊乱,本文通过一个例子说明Log4j的常规用法。

1. 新建1个gradle项目,在build.gradle中配置依赖项:

        compile 'org.slf4j:slf4j-api:1.7.25'
	compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.25'
	compile group: 'log4j', name: 'log4j', version: '1.2.17'

2. 在resources目录下新建 log4j.properties属性文件,配置内容如下:

log4j.rootLogger=INFO,console,dailyFile
log4j.additivity.org.apache=true
#console本地输出
log4j.appender.console=org.apache.log4j.ConsoleAppender
#log4j.appender.console.Threshold=INFO
#log4j.appender.console.ImmediateFlush=true
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] [%p] %m%n

#每日日志文件(dailyFile)
log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.dailyFile.Threshold=DEBUG
log4j.appender.dailyFile.ImmediateFlush=true
log4j.appender.dailyFile.Append=true
log4j.appender.dailyFile.File=D:/logs/log.log4j
log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n

#常规日志文件
log4j.logger.com.wushi=DEBUG,test
log4j.appender.test=org.apache.log4j.FileAppender
log4j.appender.test.File=D:/logs/wushi.log4j
log4j.appender.test.layout=org.apache.log4j.PatternLayout
log4j.appender.test.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n

log4j配置分为几个部分:logger、appender、layout

首先得有日志对象(logger),那这些日志对象把日志输出到哪里呢,控制台还是文件,这就要设置输出位置(appender),输出的格式与内容又是什么样的呢,这就要设置输出样式(layout)。

1) Logger

log4j.rootLogger=INFO,console,dailyFile
log4j.logger.com.wushi=DEBUG,test

上面2项的左边即使logger,包括根类rootLogger和 logger,logger后面可以跟上个性化类路径,以对指定的类或包描述日志行为。

log4j日志分为7个等级:ALL、DEBUG、INFO、WARN、ERROR、FATAL、OFF,从左到右等级由低到高。

2) appender

 上面logger配置的右侧即是日志等级和此logger的appender,appender可以有多个。

log4j有5种appender类型:

org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)


3) layout

log4j有4种layout类型可以设置:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

  PatterLayout的常用格式变量如下:

% p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL
% d:输出日志时间点的日期或时间,默认格式为ISO8601,可以指定格式如: % d{yyyy / MM / dd HH:mm:ss,SSS}
% r:输出自应用程序启动到输出该log信息耗费的毫秒数
% t:输出产生该日志事件的线程名
% l:输出日志事件的发生位置,相当于 % c. % M( % F: % L)的组合,包括类全名、方法、文件名以及在代码中的行数
% c:输出日志信息所属的类目,通常就是类全名
% M:输出产生日志信息的方法名
% F:输出日志消息产生时所在的文件名
% L:输出代码中的行号
% m:输出代码中指定的具体日志信息
% n:输出一个回车换行符,Windows平台为 "rn" ,Unix平台为 "n"
% x:输出和当前线程相关联的NDC(嵌套诊断环境)
% % :输出一个 "%" 字符

3. 增加测试类:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.wushi.WushiLog;
public class TestLog {

	// private static Logger logger = Logger.getLogger(TestLog.class); //the log4j Logger
	private static Logger logger = LoggerFactory.getLogger(TestLog.class);

	public static void main(String[] args) {
		logger.info("===the info new");
		logger.error("===test error");
		WushiLog wushi = new WushiLog();
		wushi.test();
	}

}
  注意此处引入的slf4j Logger类

猜你喜欢

转载自blog.csdn.net/blacksoil55/article/details/79375683