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类