log4j日志详解

本文详细介绍了log4j的三个关键组件:日志优先级、输出目的地和输出格式。日志优先级包括OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL,通常使用ERROR、WARN、INFO、DEBUG。输出格式中,%d用于显示时间,%p显示日志级别,%c显示类名,%M显示方法名,%m显示日志信息,%n插入换行,%L显示行号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本使用方法:

log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低:OFF,FATAL,ERROR,WARN,INFO,DEBUG,TRACE,ALL,一般只使用四种,从高到低有ERROR,WARN,INFO,DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件;而输出格式则控制了日志信息的显示内容。

ALL: 最低等级的,用于打开所有日志记录。
TRACE: 很低的日志级别,一般不会使用。
DEBUG: 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
INFO: 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
WARN: 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
ERROR: 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
FATAL: 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。
OFF: 最高等级的,用于关闭所有日志记录

如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

从我们实验的结果可以看出,log4j默认的优先级为ERROR或者WARN(实际上是ERROR)。

输出格式解释

%d: 日志打印的时间点,默认格式为ISO8601,也可以另外指定格式,
定义如下: %d{yyy年MM月dd日 HH时mm分ss秒SSS},则会输出:
2018年01月06日 14时47分45秒590
%p: 输出日志级别,即DEBUG,INFO,WARN,ERROR,FATAL
%-5p:表示字符小于5位,则字符居左(不加“-”号则字符居右),你可以举一反三
%c: 日志所在类的全名
%M: 日志所在方法的名字
%m: 日志信息
%n: 输出一个回车换行符
%L: 输出代码中的行号

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="20 seconds">

    <property name="logName" value="vv_public_cms" />

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %c %M %L %-5level %msg%n</Pattern>
        </layout>
    </appender>

    <appender name="LOG.ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>log/${logName}.log</File>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n
            </Pattern>
        </layout>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
		保留30天的历史日志
            <maxHistory>30</maxHistory>
            <FileNamePattern>log/${logName}.%d{yyyy-MM-dd}.log.%i</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>300MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <appender name="LOG.WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>log/${logName}-warn.log</File>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n
            </Pattern>
        </layout>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <maxHistory>30</maxHistory>
            <FileNamePattern>log/${logName}-warn.%d{yyyy-MM-dd}.log.%i</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>300MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="LOG.ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>log/${logName}-error.log</File>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n
            </Pattern>
        </layout>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <maxHistory>72</maxHistory>
            <FileNamePattern>log/${logName}-error.%d{yyyy-MM-dd}.log.%i</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>300MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

<!--     <appender name="SQL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>log/${logName}-sql.log</File>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{80} - %msg%n
            </Pattern>
        </layout>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <maxHistory>72</maxHistory>
            <FileNamePattern>log/${logName}-sql.%d{yyyy-MM-dd}.log.%i</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender> -->

    <root level="DEBUG">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="LOG.ALL" />
        <appender-ref ref="LOG.WARN" />
        <appender-ref ref="LOG.ERROR" />
    </root>
    
    <logger name="org.apache.zookeeper" level="off" additivity="false">
    </logger>
    
    <logger name="org.springframework.jdbc.datasource" level="off" additivity="false">
    </logger>
    
    <logger name="org.apache.activemq" level="off" additivity="false" >
    </logger>
    

</configuration>

扫描关注下面二维码获得更多有用的资源!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值