master
云海梦尘 2022-06-08 15:27:33 +08:00
parent e104e752e3
commit 317a76a542
3 changed files with 46 additions and 78 deletions

View File

@ -58,6 +58,15 @@ slf4j: `https://repo1.maven.org/maven2/org/slf4j/`
``` ```
### 配置说明 ### 配置说明
#### configuration 节点配置
```xml
<!-- scan程序运行时配置文件被修改是否重新加载。true=重新加载false=不重新加载默认为true; -->
<!-- scanPeriod监测配置文件被修改的时间间隔scan属性必须设置为true才可生效默认为1分钟默认单位是毫秒 -->
<!-- debug是否打印logback程序运行的日志信息。true=打印false=不打印默认为false; -->
<configuration scan="true" scanPeriod="60" debug="false">
</configuration>
```
#### 主要配置 #### 主要配置
LoggerAppenders 与 Layouts LoggerAppenders 与 Layouts
* Logger 日志记录器 - 日志输出时%logger输出的名称/类路径 * Logger 日志记录器 - 日志输出时%logger输出的名称/类路径

View File

@ -2,81 +2,15 @@ package com.test;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import sun.rmi.runtime.Log;
import java.util.HashMap;
import java.util.Map;
public class Demo { public class Demo {
// TRACE < DEBUG < INFO < WARN < ERROR // TRACE < DEBUG < INFO < WARN < ERROR
private static Map<String,Logger> loggerMap = new HashMap<>();
private static Logger t = LoggerFactory.getLogger(Demo.class); private static Logger t = LoggerFactory.getLogger(Demo.class);
public static final String KEY = "className"; public static final String KEY = "className";
public static void main(String[] args) { public static void main(String[] args) {
// MDC.put("className",Demo.class.getName()); for (int i = 0; i < 1000000; i++) {
// final Logger logger = LoggerFactory.getLogger("com.test.Demo"); t.info("中国文化博大精深,此曲只应天上有,文具那得确认下,倒在床上有关系~" + i);
// try{ }
// System.out.println(10/0);
// }catch (Exception e){
// logger.error(e.getMessage(),e);
// }
// logger.trace("Entering application.");
// logger.debug("Entering application.");
// logger.info("Entering application.");
// logger.warn("Entering application.");
// logger.error("Entering application.");
// MDC.clear();
// new Thread(()->{
// System.out.println("M");
// for (int i = 0; i < 100; i++) {
// test("com.io.test.M");
// }
// }).start();
// new Thread(()->{
// System.out.println("X");
// for (int i = 0; i < 100; i++) {
// test("com.io.test.X");
// }
// }).start();
// new Thread(()->{
// System.out.println("F");
// for (int i = 0; i < 100; i++) {
// test("com.io.test.F");
// }
// }).start();
// for (int i = 0; i < 100; i++) {
// test("com.io.test.F");
// }
// test("com.io.apache.First");
// test("com.io.apache.Second");
// test("com.io.apache.Three");
new Thread(()->{
MDC.put(Demo.KEY,Demo2.class.getName());
Demo2 demo2 = new Demo2();
demo2.test();
MDC.remove(KEY);
MDC.clear();
System.out.println(1);
}).start();
new Thread(()->{
MDC.put(Demo.KEY, Demo3.class.getName());
Demo3 demo3 = new Demo3();
demo3.test();
MDC.remove(KEY);
MDC.clear();
System.out.println(2);
}).start();
}
public static void test(String className){
System.out.println(className);
MDC.put(KEY,className);
Logger logger = LoggerFactory.getLogger(className);
logger.info(className);
MDC.remove(KEY);
} }
} }

View File

@ -8,23 +8,49 @@
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder> <encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{26} - %msg%n</pattern> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{250} - %msg%n</pattern>
</encoder> </encoder>
</appender> </appender>
<!--将日志输出到可切分的文件--> <!--将日志输出到可切分的文件将昨天的日志添加到fileNamePattern配置的文件中-->
<appender name="ROLL_APP" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="ROLL_APP" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/roll-back.log</file> <file>${log.path}/roll-back.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/bak/logback.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <fileNamePattern>${log.path}/bak/logback.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- 日志在磁盘上保留天数 -->
<maxHistory>30</maxHistory> <maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap> <totalSizeCap>10KB</totalSizeCap>
</rollingPolicy> </rollingPolicy>
<encoder> <encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{26} - %msg%n</pattern> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{250} - %msg%n</pattern>
</encoder> </encoder>
</appender> </appender>
<!--将日志输出到可切分的文件,将超过100MB的日志添加到fileNamePattern配置的文件中-->
<appender name="ROLL_APP2" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/roll-back.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 最大文件大小超过会将旧数据存入到rolling.2022-01-17.log0并压缩成rolling.2022-01-17.log0.gz
新数据继续追加到roll.log -->
<maxFileSize>100MB</maxFileSize>
<fileNamePattern>${log.path}/bak/logback.%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
<!-- 日志在磁盘上保留天数 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{250} - %msg%n</pattern>
</encoder>
</appender>
<!-- 把日志异步输出到磁盘文件中避免每次都进行磁盘IO操作 -->
<appender name="ASYNC_APP" class="ch.qos.logback.classic.AsyncAppender">
<!--discardingThreshold如果BlockingQueue中还剩余20%的容量那么程序会丢弃TRACE、DEBUG和INFO级别的日志打印事件event只保留WARN和ERROR级别的。为了保留所有的日志打印事件可以将该值设置为0-->
<discardingThreshold>0</discardingThreshold>
<!-- queueSize指的是BlockingQueue的队列容量大小默认为256个程序测试时可设置小一点方便监控日志 -->
<queueSize>100</queueSize>
<appender-ref ref="ROLL_APP" />
</appender>
<!--分割日志,按照指定文件存储不同日志 --> <!--分割日志,按照指定文件存储不同日志 -->
<appender name="SIFT_APP" class="ch.qos.logback.classic.sift.SiftingAppender"> <appender name="SIFT_APP" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator> <discriminator>
@ -44,17 +70,17 @@
<!-- 日志文件的名字会根据fileNamePattern的值每隔一段时间改变一次 --> <!-- 日志文件的名字会根据fileNamePattern的值每隔一段时间改变一次 -->
<!-- 文件名logs/project_info.2017-12-05.0.log --> <!-- 文件名logs/project_info.2017-12-05.0.log -->
<!-- 注意SizeAndTimeBasedRollingPolicy中 i和d令牌都是强制性的必须存在要不会报错 --> <!-- 注意SizeAndTimeBasedRollingPolicy中 i和d令牌都是强制性的必须存在要不会报错 -->
<fileNamePattern>${log.path}/%d/${userName}_aop_info.%i.log</fileNamePattern> <fileNamePattern>${log.path}/%d/${className}.%i.log</fileNamePattern>
<!-- 每产生一个日志文件该日志文件的保存期限为30天, ps:maxHistory的单位是根据fileNamePattern中的翻转策略自动推算出来的,例如上面选用了yyyy-MM-dd,则单位为天 <!-- 每产生一个日志文件该日志文件的保存期限为30天, ps:maxHistory的单位是根据fileNamePattern中的翻转策略自动推算出来的,例如上面选用了yyyy-MM-dd,则单位为天
如果上面选用了yyyy-MM,则单位为月,另外上面的单位默认为yyyy-MM-dd--> 如果上面选用了yyyy-MM,则单位为月,另外上面的单位默认为yyyy-MM-dd-->
<maxHistory>30</maxHistory> <maxHistory>30</maxHistory>
<!-- 每个日志文件到10mb的时候开始切分最多保留30天但最大到20GB哪怕没到30天也要删除多余的日志 --> <!-- 每个日志文件到10mb的时候开始切分最多保留30天但最大到20GB哪怕没到30天也要删除多余的日志 -->
<totalSizeCap>20GB</totalSizeCap> <totalSizeCap>20GB</totalSizeCap>
<!-- maxFileSize:这是活动文件的大小默认值是10MB测试时可改成5KB看效果 --> <!-- maxFileSize:这是活动文件的大小默认值是10MB测试时可改成5KB看效果 -->
<maxFileSize>10MB</maxFileSize> <maxFileSize>100MB</maxFileSize>
</rollingPolicy> </rollingPolicy>
<encoder> <encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{26} - %msg%n</pattern> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{250} - %msg%n</pattern>
<!-- 记录日志的编码:此处设置字符集 - --> <!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset> <charset>UTF-8</charset>
</encoder> </encoder>
@ -65,8 +91,7 @@
<!--根节点的输出日志定义--> <!--根节点的输出日志定义-->
<root level="debug"> <root level="debug">
<appender-ref ref="STDOUT" /> <appender-ref ref="STDOUT" />
<!-- <appender-ref ref="ROLL_APP" />--> <appender-ref ref="ASYNC_APP" />
<appender-ref ref="SIFT_APP" />
</root> </root>
<!--自定义输出日志,该日志会继承<root>节点的appender如果自己在添加appender会输出双份日志--> <!--自定义输出日志,该日志会继承<root>节点的appender如果自己在添加appender会输出双份日志-->