首页   >   代码编程

log4j使用之ConsoleAppender教程

了解了log4j的一些基本概念和参数之后,我们首先来使用一下它的ConsoleAppender,来看看效果如何,项目就不再重新搭建了,直接使用上次写ssm教程时搭建的springmvc + spring + mybatis项目,由于是log4j而不是log4j2,所以暂时还是以properties文件的形式来讲解。

话不多说,直接上配置文件:log4j.properties

# 配置根logger,如果下面没有自定义logger,那么项目中的日志就都是debug级别(level的大小写没关系),输出到console
log4j.rootLogger=DEBUG,console

# 屏蔽框架日志,只有报错的时候才放出来,优先级高于rootLogger
log4j.logger.org.springframework=ERROR
log4j.logger.org.apache.ibatis=ERROR
log4j.logger.org.mybatis.spring=ERROR
log4j.logger.com.mchange=ERROR

# 自定义包路径中的日志等级,直接写一个level即可,appender可选择,如果没写就默认使用rootLogger中配置的console
log4j.logger.com.ssm=DEBUG

# 打印出jdbc的日志
log4j.appender.java.sql.ResultSet=DEBUG
log4j.appender.java.sql.Connection=DEBUG
log4j.appender.java.sql.Statement=DEBUG
log4j.appender.java.sql.PreparedStatement=DEBUG

# 控制台(console)
log4j.appender.console=org.apache.log4j.ConsoleAppender
#指定输出级别为debug,拥有最高优先级
log4j.appender.console.Threshold=DEBUG
#日志立即输出,不用缓冲,默认为true
log4j.appender.console.ImmediateFlush=true
#打印的语句,如果是system.err就会看到控制台一片红
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} [%5p] - %c - %m%n

注释写的很全,就不再啰嗦,需要提一点就是pattern的配置,大家注意中间的[%5p],本来%p是日志级别,但是单词长短不一,就以最大的debug长度为基准,统一长度为5,长度不够的就是用空格占位。

直接来看一下效果图:

log4j使用之ConsoleAppender教程

最后再看一个属性:log4j.additivity,有时候只想让日志在自己的appender中输出,而不想在rootLogger中定义的appender中输出,那么就可以使用此参数来解决,由于默认为true,所以会继承父logger的appender。

可能大家还不明白什么意思,我来写一个简单的示例:分别定义不同的appender,使用system.int和system.out来区分颜色

# 配置根logger,如果下面没有自定义logger,那么项目中的日志就都是debug级别,输出到console
log4j.rootLogger=DEBUG,console

# 屏蔽框架日志,只有报错的时候才放出来,优先级高于rootLogger
log4j.logger.org.springframework=ERROR
log4j.logger.org.apache.ibatis=ERROR
log4j.logger.org.mybatis.spring=ERROR
log4j.logger.com.mchange=ERROR

# 自定义包路径中的日志等级,直接写一个level即可,appender可选择,如果没写就默认使用rootLogger中配置的console
log4j.logger.com.ssm=DEBUG,console1

# 打印出jdbc的日志
log4j.appender.java.sql.ResultSet=DEBUG
log4j.appender.java.sql.Connection=DEBUG
log4j.appender.java.sql.Statement=DEBUG
log4j.appender.java.sql.PreparedStatement=DEBUG

# 控制台(console)
log4j.appender.console=org.apache.log4j.ConsoleAppender
#指定输出级别为debug,优先级最高
log4j.appender.console.Threshold=DEBUG
#日志立即输出,不用缓冲,默认为true
log4j.appender.console.ImmediateFlush=true
#打印的语句,如果是system.err就会看到控制台一片红
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} [%5p] - %c - %m%n

log4j.appender.console1=org.apache.log4j.ConsoleAppender
log4j.appender.console1.Threshold=DEBUG
log4j.appender.console1.ImmediateFlush=true
log4j.appender.console1.Target=System.err
log4j.appender.console1.layout=org.apache.log4j.PatternLayout
log4j.appender.console1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c - %m%n

我分别创建了两个ConsoleAppender,rootLogger的appender叫console,使用system.out输出日志,自己包的appender叫console1,使用system.err输出日志。

运行截图:

log4j使用之ConsoleAppender教程

上图中,我们可以看到,红色和白色的日志都打印出来了,说明我自己包的日志appender也继承了rootLogger的appender,因为它打印了白色字体的日志。

改一下配置,加上log4j.additivity:

# 配置根logger,如果下面没有自定义logger,那么项目中的日志就都是debug级别,输出到console
log4j.rootLogger=DEBUG,console

# 屏蔽框架日志,只有报错的时候才放出来,优先级高于rootLogger
log4j.logger.org.springframework=ERROR
log4j.logger.org.apache.ibatis=ERROR
log4j.logger.org.mybatis.spring=ERROR
log4j.logger.com.mchange=ERROR

# 自定义包路径中的日志等级,直接写一个level即可,appender可选择,如果没写就默认使用rootLogger中配置的console
log4j.logger.com.ssm=DEBUG,console1

#不继承父级logger(rootLogger)中的appender,默认是true
log4j.additivity.com.ssm=false

# 打印出jdbc的日志
log4j.appender.java.sql.ResultSet=DEBUG
log4j.appender.java.sql.Connection=DEBUG
log4j.appender.java.sql.Statement=DEBUG
log4j.appender.java.sql.PreparedStatement=DEBUG

# 控制台(console)
log4j.appender.console=org.apache.log4j.ConsoleAppender
#指定输出级别为debug,优先级最高
log4j.appender.console.Threshold=DEBUG
#日志立即输出,不用缓冲,默认为true
log4j.appender.console.ImmediateFlush=true
#打印的语句,如果是system.err就会看到控制台一片红
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} [%5p] - %c - %m%n

log4j.appender.console1=org.apache.log4j.ConsoleAppender
log4j.appender.console1.Threshold=DEBUG
log4j.appender.console1.ImmediateFlush=true
log4j.appender.console1.Target=System.err
log4j.appender.console1.layout=org.apache.log4j.PatternLayout
log4j.appender.console1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c - %m%n

日志截图:

log4j使用之ConsoleAppender教程

可以看到,此时就只有红色日志了,说明没有继承rootLogger,此参数用的并不多(我工作中碰见的很少),但是属于那种在关键时候能有奇效的参数,所以大家需要留意一下它。

QQ群Ⅰ: 686430774 (已满)

QQ群Ⅱ: 718410762 (已满)

QQ群Ⅲ: 638620451 (已满)

QQ群Ⅳ: 474195684

如果文章有帮到你,可以考虑请博主喝杯咖啡!

分享到:

欢迎分享本文,转载请注明出处!

作者:不忘初心

发布时间:2019-05-10

永久地址:https://www.jiweichengzhu.com/article/67ff6acd42494407b819e79b27ce9e48

评论