log4j、log4j2、slf4j的使用

    科技2025-04-02  26

    文章目录

    常用日志组件日志门面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"> <PatternLayout pattern="%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> <!-- 输出格式 --> <PatternLayout pattern="%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> <!-- 输出格式 --> <PatternLayout pattern="%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> <PatternLayout pattern="[%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> <PatternLayout pattern="[%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的话也不会补空格。
    Processed: 0.011, SQL: 8