首页 > 其他分享 >slf4j、logback、log4j、log4j2的区别和配置文件

slf4j、logback、log4j、log4j2的区别和配置文件

时间:2023-03-02 11:12:06浏览次数:58  
标签:log 配置文件 -- yyyy MM slf4j 日志 logback

区别

  • slf4j是一个日志接口,自己没有具体实现日志系统,只提供了一组标准的调用api,这样将调用和具体的日志实现分离,使用slf4j后有利于根据自己实际的需求更换具体的日志系统,比如,之前使用的具体的日志系统为log4j,想更换为logback时,只需要删除log4j相关的jar,然后加入logback相关的jar和日志配置文件即可,而不需要改动具体的日志输出方法,试想如果没有采用这种方式,当你的系统中日志输出有成千上万条时,你要更换日志系统将是多么庞大的一项工程。

  • logback是springboot自带的日志框架

  • log4j是Apache的一个开放源代码项目

  • log4j2是log4j的升级版

其他

logback.xml和logback-spring.xml的区别?

  • logback.xml可在非Spring应用程序中使用,例如一个main方法或者一个JUnit的测试方法
  • logback-spring.xml只有在Spring应用程序运行的时候才生效,即带有@SpringBootApplication注解的类启动的时候才会生效。

参考配置

仅自己用的觉得不错

logback.xml

  • 每个月的日志分开文件夹存放
  • 保留指定天数后自动删除
  • 异步输出提高性能
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="log.path" value="./log"/>
    <property name="console.log.pattern"
              value="%yellow([%d{yyyy-MM-dd HH:mm:ss:SSS}]) %green([%thread]) %highlight([ %-5level ]) → %boldMagenta([%logger{36}]%n) %msg%n"/>
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>

    <!-- IDE控制台 输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${console.log.pattern}</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!-- 控制台 日志写出 -->
    <appender name="file_console" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/console.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/logs/${date:yyyy-MM}/console.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
            <!-- 日志最大 1天 -->
            <maxHistory>1</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
        </filter>
    </appender>

    <!-- info 日志写出 -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/logs/${date:yyyy-MM}/info-%d{yyyy-MM-dd}.log.zip</fileNamePattern>
            <!-- 日志最大的历史 30天 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- warn 日志写出 -->
    <appender name="file_warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/warn.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/logs/${date:yyyy-MM}/warn-%d{yyyy-MM-dd}.log.zip</fileNamePattern>
            <!-- 日志最大的历史 45天 -->
            <maxHistory>45</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>WARN</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- error 日志写出 -->
    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/logs/${date:yyyy-MM}/error-%d{yyyy-MM-dd}.log.zip</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- info异步输出 -->
    <appender name="async_info" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="file_info"/>
    </appender>

    <!-- warn异步输出 -->
    <appender name="async_warn" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="file_warn"/>
    </appender>

    <!-- error异步输出 -->
    <appender name="async_error" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="file_error"/>
    </appender>


    <!--系统操作日志-->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="async_info" />
        <appender-ref ref="async_warn" />
        <appender-ref ref="async_error" />
        <appender-ref ref="file_console" />
    </root>

</configuration>

log4j2-spring.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="INFO" monitorInterval="5">
    <!-- 定义变量 -->
    <Properties>
        <Property name="log.path">./log</Property>
        <Property name="console.log.pattern">%yellow([%d{yyyy-MM-dd HH:mm:ss:SSS}]) %green([%thread]) %highlight([ %-5level ]) → %boldMagenta([%logger{36}]%n) %msg%n</Property>
        <Property name="log.pattern">%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Property>
    </Properties>

    <!--先定义所有的appender-->
    <appenders>
        <!-- IDE控制台 输出 -->
        <console name="console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="${console.log.pattern}"/>
        </console>

        <!-- 控制台 日志写出 -->
        <RollingFile name="file_console" fileName="${log.path}/console.log" filePattern="${log.path}/logs/${date:yyyy-MM}/console-%d{yyyy-MM-dd}.log.zip">
            <!--只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="ACCEPT"/>
            <PatternLayout pattern="${log.pattern}"/>
            <Policies>
                <!-- TimeBasedTriggeringPolicy用于按时间滚动日志。
                例如我写的filePattern是console-%d{yyyy-MM-dd}.log.zip,意思是最小单位是天,那么1就代表每1天就新建一个日志文件 -->
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                <!-- SizeBasedTriggeringPolicy用于按文件大小滚动日志。
                每当日志文件超过size指定的大小,则这size大小的日志会自动存入按filePattern属性指定建立的文件夹下面并进行压缩存档 -->
<!--                <SizeBasedTriggeringPolicy size="100MB"/>-->
            </Policies>
            <DefaultRolloverStrategy fileIndex="nomax">
                <Delete basePath="${log_base_dir}" maxDepth="2">
                    <IfFileName glob="*/logs/console-*.log.zip">
                        <IfAny>
                            <!-- 只要日志文件总大小超过1024MB就会删除按时间顺序最早的日志文件 -->
                            <!-- <IfAccumulatedFileSize exceeds="1GB"/>-->
                            <!-- 只要日志文件总数量超过5个就删除按时间顺序最早的日志文件 -->
                            <!-- <IfAccumulatedFileCount exceeds="5"/>-->
                            <!-- 只要日志文件最近修改时间为1天前或更早就会删除按时间顺序最早的日志文件 -->
                            <IfLastModified age="1d"/>
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>


        <!-- info 日志写出 -->
        <RollingFile name="file_info" fileName="${log.path}/info.log" filePattern="${log.path}/logs/${date:yyyy-MM}/info-%d{yyyy-MM-dd}.log.zip">
            <!--只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${log.pattern}"/>
            <Policies>
                <!-- TimeBasedTriggeringPolicy用于按时间滚动日志。
                例如我写的filePattern是console-%d{yyyy-MM-dd}.log.zip,意思是最小单位是天,那么1就代表每1天就新建一个日志文件 -->
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                <!-- SizeBasedTriggeringPolicy用于按文件大小滚动日志。
                每当日志文件超过size指定的大小,则这size大小的日志会自动存入按filePattern属性指定建立的文件夹下面并进行压缩存档 -->
                <!--                <SizeBasedTriggeringPolicy size="100MB"/>-->
            </Policies>
            <DefaultRolloverStrategy fileIndex="nomax">
                <Delete basePath="${log_base_dir}" maxDepth="2">
                    <IfFileName glob="*/logs/info-*.log.zip">
                        <IfAny>
                            <!-- 只要日志文件总大小超过1024MB就会删除按时间顺序最早的日志文件 -->
                            <!-- <IfAccumulatedFileSize exceeds="1GB"/>-->
                            <!-- 只要日志文件总数量超过5个就删除按时间顺序最早的日志文件 -->
                            <!-- <IfAccumulatedFileCount exceeds="5"/>-->
                            <!-- 只要日志文件最近修改时间为30天前或更早就会删除按时间顺序最早的日志文件 -->
                            <IfLastModified age="30d"/>
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!-- warn 日志写出 -->
        <RollingFile name="file_warn" fileName="${log.path}/warn.log" filePattern="${log.path}/logs/${date:yyyy-MM}/warn-%d{yyyy-MM-dd}.log.zip">
            <!--只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${log.pattern}"/>
            <Policies>
                <!-- TimeBasedTriggeringPolicy用于按时间滚动日志。
                例如我写的filePattern是warn-%d{yyyy-MM-dd}.log.zip,意思是最小单位是天,那么1就代表每1天就新建一个日志文件 -->
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                <!-- SizeBasedTriggeringPolicy用于按文件大小滚动日志。
                每当日志文件超过size指定的大小,则这size大小的日志会自动存入按filePattern属性指定建立的文件夹下面并进行压缩存档 -->
                <!--                <SizeBasedTriggeringPolicy size="100MB"/>-->
            </Policies>
            <DefaultRolloverStrategy fileIndex="nomax">
                <Delete basePath="${log_base_dir}" maxDepth="2">
                    <IfFileName glob="*/logs/warn-*.log.zip">
                        <IfAny>
                            <!-- 只要日志文件总大小超过1024MB就会删除按时间顺序最早的日志文件 -->
                            <!-- <IfAccumulatedFileSize exceeds="1GB"/>-->
                            <!-- 只要日志文件总数量超过5个就删除按时间顺序最早的日志文件 -->
                            <!-- <IfAccumulatedFileCount exceeds="5"/>-->
                            <!-- 只要日志文件最近修改时间为45天前或更早就会删除按时间顺序最早的日志文件 -->
                            <IfLastModified age="45d"/>
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!-- error 日志写出 -->
        <RollingFile name="file_error" fileName="${log.path}/error.log" filePattern="${log.path}/logs/${date:yyyy-MM}/error-%d{yyyy-MM-dd}.log.zip">
            <!--只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${log.pattern}"/>
            <Policies>
                <!-- TimeBasedTriggeringPolicy用于按时间滚动日志。
                例如我写的filePattern是error-%d{yyyy-MM-dd}.log.zip,意思是最小单位是天,那么1就代表每1天就新建一个日志文件 -->
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                <!-- SizeBasedTriggeringPolicy用于按文件大小滚动日志。
                每当日志文件超过size指定的大小,则这size大小的日志会自动存入按filePattern属性指定建立的文件夹下面并进行压缩存档 -->
                <!--                <SizeBasedTriggeringPolicy size="100MB"/>-->
            </Policies>
            <DefaultRolloverStrategy fileIndex="nomax">
                <Delete basePath="${log_base_dir}" maxDepth="2">
                    <IfFileName glob="*/logs/error-*.log.zip">
                        <IfAny>
                            <!-- 只要日志文件总大小超过1024MB就会删除按时间顺序最早的日志文件 -->
                            <!--                            <IfAccumulatedFileSize exceeds="1GB"/>-->
                            <!-- 只要日志文件总数量超过5个就删除按时间顺序最早的日志文件 -->
                            <!--                            <IfAccumulatedFileCount exceeds="5"/>-->
                            <!-- 只要日志文件最近修改时间为60天前或更早就会删除按时间顺序最早的日志文件 -->
                            <IfLastModified age="60d"/>
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>



    </appenders>

    <!--然后定义logger,只有定义了logger并引入appender,appender才会生效-->
    <loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.springframework" level="INFO"/>
        <logger name="org.mybatis" level="INFO"/>
        <root level="info">
            <appender-ref ref="console"/>
            <appender-ref ref="file_info"/>
            <appender-ref ref="file_warn"/>
            <appender-ref ref="file_error"/>
        </root>
    </loggers>

</configuration>

标签:log,配置文件,--,yyyy,MM,slf4j,日志,logback
From: https://www.cnblogs.com/daen/p/17171106.html

相关文章