文章目录
-
- 常用日志组件
- 日志门面
- log4j2的使用
- log4j的配置(log4j.properties)
- Slf4j使用
- PatternLayout格式化符号说明
日志框架 log4j2 全解析
常用日志组件
-
Log4j:
- 是Apache的一个开放源代码项目。通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、数据库等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
- Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE>DEBUG>INFO>WARN>ERROR>FATAL>OFF。如果配置为OFF级别,表示关闭log。
-
Log4j2:
- 前身是log4j,它吸收了logback的设计,重新推出的一款新组件,且使用.xml/.json文件来替换了之前.properties来配置。Log4j2采用异步日志器,基于LMAX Disruptor库,相比较log4j高出10倍吞吐量。
-
Log4j支持两种格式的配置文件:properties和xml。包含三个主要的组件:Logger、appender、Layout。
日志门面
- Common-logging(JCL)
- Slf4j(The Simple Logging Facade for Java)
log4j2的使用
- xml配置(log4j2.xml)
<?xml version="1.0" encoding="UTF-8"?>
<configuration><appenders><!-- 控制台输出 --><console name="Console" target="SYSTEM_OUT"><PatternLayoutpattern="%d{HH:mm:ss.SSS} [%t] %-5level %class %L %M -- %msg%n" /></console><!-- fileName:输出路径 filePattern:命名规则 --><RollingFile name="RollingFileDebug"fileName="E:/logs/debug.log"filePattern="E:/logs/$${date:yyyy-MM-dd}/debug-%d{yyyy-MM-dd}-%i.log"><Filters><ThresholdFilter level="DEBUG" /><ThresholdFilter level="INFO" onMatch="DENY"onMismatch="NEUTRAL" /></Filters><!-- 输出格式 --><PatternLayoutpattern="%d{HH:mm:ss.SSS} [%t] %-5level %class{36} %L %M - %msg%n" /><Policies><!-- 单个日志文件的大小限制 --><SizeBasedTriggeringPolicy size="100 MB" /></Policies><!-- 最多保留20个日志文件 --><DefaultRolloverStrategy max="20" /></RollingFile><RollingFile name="RollingFileInfo"fileName="E:/logs/info.log"filePattern="E:/logs/$${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log"><Filters><ThresholdFilter level="INFO" /><ThresholdFilter level="WARN" onMatch="DENY"onMismatch="NEUTRAL" /></Filters><!-- 输出格式 --><PatternLayoutpattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" /><Policies><!-- SizeBasedTriggeringPolicy单个文件的大小限制 --><SizeBasedTriggeringPolicy size="100 MB" /></Policies><!-- DefaultRolloverStrategy同一个文件下的最大文件数 --><DefaultRolloverStrategy max="20" /></RollingFile><RollingFile name="RollingFileWarn"fileName="E:/logs/warn.log"filePattern="E:/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"><Filters><ThresholdFilter level="WARN" /><ThresholdFilter level="ERROR" onMatch="DENY"onMismatch="NEUTRAL" /></Filters><PatternLayoutpattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /><Policies><!--<TimeBasedTriggeringPolicy modulate="true" interval="1"/> --><SizeBasedTriggeringPolicy size="100 MB" /></Policies><!--最多保留20个日志文件 --><DefaultRolloverStrategy max="20" min="0" /></RollingFile><RollingFile name="RollingFileError"fileName="E:/logs/error.log"filePattern="E:/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"><Filters><ThresholdFilter level="ERROR" /><ThresholdFilter level="FATAL" onMatch="DENY"onMismatch="NEUTRAL" /></Filters><PatternLayoutpattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /><Policies><!--<TimeBasedTriggeringPolicy modulate="true" interval="1"/> --><SizeBasedTriggeringPolicy size="100 MB" /></Policies><!--最多保留20个日志文件 --><DefaultRolloverStrategy max="20" min="0" /></RollingFile></appenders><loggers><!-- 程序员看的日志一般是异步日志,运营日志一般是同步日志 --><!--过滤掉spring和mybatis的一些无用的debug信息 --><!--<AsyncLogger name="org.springframework" level="error" includeLocation="true">--><!--<AppenderRef ref="RollingFileError"></AppenderRef>--><!--</AsyncLogger>--><!--<AsyncLogger name="org.mybatis" level="error" includeLocation="true">--><!--<AppenderRef ref="RollingFileError"></AppenderRef>--><!--</AsyncLogger>--><!--<AsyncLogger name="com.alibaba.druid" level="error" includeLocation="true">--><!--<AppenderRef ref="RollingFileError"></AppenderRef>--><!--</AsyncLogger>--><!----><!--<AsyncLogger level="debug" includeLocation="true">--><!--<AppenderRef ref="RollingFileDebug"></AppenderRef>--><!--<appender-ref ref="RollingFileWarn"/>--><!--<appender-ref ref="RollingFileError"/>--><!--<appender-ref ref="RollingFileFatal"/>--><!--</AsyncLogger>--><!--<root level="info">--><!--<appender-ref ref="Console"/>--><!--<appender-ref ref="RollingFileInfo"/>--><!--</root>--><logger name="org.springframework" level="error"></logger><logger name="org.apache.ibatis" level="error"></logger><root level="all"><appender-ref ref="Console"/><appender-ref ref="RollingFileDebug"/><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/></root></loggers>
</configuration>
- 使用
private Logger l = LogManager.getLogger(SysuserHandler.class);
l.debug("---debug信息--");
l.info("---info信息--");
l.warn("---warn信息--");
l.error("---error信息--");
log4j的配置(log4j.properties)
############ERROR WARM INFO DEBUG#####################
log4j.rootLogger=INFO,CONSOLE,logfile,errfile,MAIL
############### CONSOLE OutPut ###############
#ConsoleAppender FileAppender DailyRollingFileAppender RollingFileAppender WriterAppender
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#HTMLLayout PatternLayout SimpleLayout TTCCLayout
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %p [%c] - %m%n
############### Default Log Output #################
log4j.logger.logfile=INFO,logfile
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.Append=true
log4j.appender.logfile.Threshold=INFO
log4j.appender.logfile.File=${ssm.root}/WEB-INF/log/myweb.log
log4j.appender.logfile.MaxFileSize=51200KB
log4j.appender.logfile.MaxBackupIndex=5
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n############### Custom Err Output #################
log4j.logger.errfile=ERROR,errfile
log4j.appender.errfile=org.apache.log4j.RollingFileAppender
log4j.appender.errfile.Append=true
log4j.appender.errfile.Threshold=ERROR
log4j.appender.errfile.File=${ssm.root}/WEB-INF/log/error.log
log4j.appender.errfile.MaxFileSize=51200KB
log4j.appender.errfile.MaxBackupIndex=5
log4j.appender.errfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n############### MAIL Output #################
#log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
#log4j.appender.MAIL.Threshold=ERROR
#log4j.appender.MAIL.BufferSize=1
##smtp server addr
#log4j.appender.MAIL.SMTPHost=smtp.exmail.qq.com
##email title
#log4j.appender.MAIL.Subject=InterfaceErrorMessage
##email user from
#log4j.appender.MAIL.From=f@f.com
##email user noticegroup a@a.com,b@b.com
#log4j.appender.MAIL.To=a@a.com,b@b.com
##username
#log4j.appender.MAIL.SMTPUsername=f@f.com
##password
#log4j.appender.MAIL.SMTPPassword=Password
#log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
#log4j.appender.MAIL.layout.ConversionPattern=[InterfaceErrorMessage] [%p] [%d{yyyy-MM-dd HH:mm:ss}] [ Class = %C | Method = %M | Line = %L ] | %m%n############### Log4j SQL Output #################
log4j.logger.com.javasm=INFO
log4j.logger.org.springframework=INFO#log4j.logger.com.ibatis = DEBUG,CONSOLE
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG#log4j.logger.java.sql=DEBUG,CONSOLE
#log4j.logger.java.sql.Connection=DEBUG
#log4j.logger.java.sql.Statement=DEBUG
#log4j.logger.java.sql.PreparedStatement=DEBUG
#log4j.logger.java.sql.ResultSet=DEBUG#log4j.logger.org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl=DEBUG
Slf4j使用
- Slf4j的使用
private Logger l = LoggerFactory.getLogger(SysuserHandler.class);
l.debug("---debug信息--");
l.info("---info信息--");
l.warn("---warn信息--");
l.error("---error信息--");
PatternLayout格式化符号说明
- %p 或 %level:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
- %d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
- %r:输出自应用程序启动到输出该log信息耗费的毫秒数。
- %t:输出产生该日志事件的线程名。
- %class:输出日志信息所属的类目,通常就是所在类的全名。
- %M:输出产生日志信息的方法名。
- %F:输出日志消息产生时所在的文件名称。
- %L:输出代码中的行号。
- %m 或%msg或%message::输出代码中指定的具体日志信息。
- %n:输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”。
- %x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
- %%:输出一个“%”字符。
- 另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
- %-20:“-”号表示左对齐,不满足20个字符则以空格代替。
- %.30:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。