区别
-
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
- 每个月的日志分开文件夹存放
- 保留指定天数后自动删除
- 没有弄异步输出,需要的话可以参考 https://blog.csdn.net/u011943534/article/details/119876319
<?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