越城区建设和交通运输局网站,免费建站微信,wordpress评论时间,建设部网站公示使用 Log4j
前面介绍了Commons Logging#xff0c;可以作为“日志接口”来使用。而真正的“日志实现”可以使用Log4j。
Log4j是一种非常流行的日志框架#xff0c;最新版本是2.x。
Log4j是一个组件化设计的日志系统#xff0c;它的架构大致如下#xff1a;
log.info(可以作为“日志接口”来使用。而真正的“日志实现”可以使用Log4j。
Log4j是一种非常流行的日志框架最新版本是2.x。
Log4j是一个组件化设计的日志系统它的架构大致如下
log.info(User signed in.);││ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐├──│ Appender │───│ Filter │───│ Layout │───│ Console ││ └──────────┘ └──────────┘ └──────────┘ └──────────┘││ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐├──│ Appender │───│ Filter │───│ Layout │───│ File ││ └──────────┘ └──────────┘ └──────────┘ └──────────┘││ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐└──│ Appender │───│ Filter │───│ Layout │───│ Socket │└──────────┘ └──────────┘ └──────────┘ └──────────┘当我们使用Log4j输出一条日志时Log4j自动通过不同的Appender把同一条日志输出到不同的目的地。例如
console输出到屏幕file输出到文件socket通过网络输出到远程计算机jdbc输出到数据库
在输出日志的过程中通过Filter来过滤哪些log需要被输出哪些log不需要被输出。例如仅输出ERROR级别的日志。
最后通过Layout来格式化日志信息例如自动添加日期、时间、方法名称等信息。
上述结构虽然复杂但我们在实际使用的时候并不需要关心Log4j的API而是通过配置文件来配置它。
以XML配置为例使用Log4j的时候我们把一个log4j2.xml的文件放到classpath下就可以让Log4j读取配置文件并按照我们的配置来输出日志。下面是一个配置文件的例子
?xml version1.0 encodingUTF-8?
ConfigurationProperties!-- 定义日志格式 --Property namelog.pattern%d{MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}%n%msg%n%n/Property!-- 定义文件名变量 --Property namefile.err.filenamelog/err.log/PropertyProperty namefile.err.patternlog/err.%i.log.gz/Property/Properties!-- 定义Appender即目的地 --Appenders!-- 定义输出到屏幕 --Console nameconsole targetSYSTEM_OUT!-- 日志格式引用上面定义的log.pattern --PatternLayout pattern${log.pattern} //Console!-- 定义输出到文件,文件名引用上面定义的file.err.filename --RollingFile nameerr bufferedIOtrue fileName${file.err.filename} filePattern${file.err.pattern}PatternLayout pattern${log.pattern} /Policies!-- 根据文件大小自动切割日志 --SizeBasedTriggeringPolicy size1 MB //Policies!-- 保留最近10份 --DefaultRolloverStrategy max10 //RollingFile/AppendersLoggersRoot levelinfo!-- 对info级别的日志输出到console --AppenderRef refconsole levelinfo /!-- 对error级别的日志输出到err即上面定义的RollingFile --AppenderRef referr levelerror //Root/Loggers
/Configuration虽然配置Log4j比较繁琐但一旦配置完成使用起来就非常方便。对上面的配置文件凡是INFO级别的日志会自动输出到屏幕而ERROR级别的日志不但会输出到屏幕还会同时输出到文件。并且一旦日志文件达到指定大小1MBLog4j就会自动切割新的日志文件并最多保留10份。
有了配置文件还不够因为Log4j也是一个第三方库我们需要从这里下载Log4j解压后把以下3个jar包放到classpath中
log4j-api-2.x.jar
log4j-core-2.x.jar
log4j-jcl-2.x.jar因为Commons Logging会自动发现并使用Log4j所以把上一节下载的commons-logging-1.2.jar也放到classpath中。
要打印日志只需要按Commons Logging的写法写不需要改动任何代码就可以得到Log4j的日志输出类似
03-03 12:09:45.880 [main] INFO com.itranswarp.learnjava.Main
Start process...最佳实践
在开发阶段始终使用Commons Logging接口来写入日志并且开发阶段无需引入Log4j。如果需要把日志写入文件 只需要把正确的配置文件和Log4j相关的jar包放入classpath就可以自动把日志切换成使用Log4j写入无需修改任何代码。
小结
通过Commons Logging实现日志不需要修改代码即可使用Log4j
使用Log4j只需要把log4j2.xml和相关jar放入classpath
如果要更换Log4j只需要移除log4j2.xml和相关jar
只有扩展Log4j时才需要引用Log4j的接口例如将日志加密写入数据库的功能需要自己开发。