init
parent
e104e752e3
commit
317a76a542
|
@ -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>
|
||||
```
|
||||
#### 主要配置
|
||||
Logger,Appenders 与 Layouts
|
||||
* Logger 日志记录器 - 日志输出时%logger输出的名称/类路径
|
||||
|
|
|
@ -2,81 +2,15 @@ package com.test;
|
|||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.slf4j.MDC;
|
||||
import sun.rmi.runtime.Log;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class Demo {
|
||||
// TRACE < DEBUG < INFO < WARN < ERROR
|
||||
private static Map<String,Logger> loggerMap = new HashMap<>();
|
||||
private static Logger t = LoggerFactory.getLogger(Demo.class);
|
||||
public static final String KEY = "className";
|
||||
|
||||
public static void main(String[] args) {
|
||||
// MDC.put("className",Demo.class.getName());
|
||||
// final Logger logger = LoggerFactory.getLogger("com.test.Demo");
|
||||
// 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);
|
||||
for (int i = 0; i < 1000000; i++) {
|
||||
t.info("中国文化博大精深,此曲只应天上有,文具那得确认下,倒在床上有关系~" + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,23 +8,49 @@
|
|||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
|
||||
<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>
|
||||
</appender>
|
||||
|
||||
<!--将日志输出到可切分的文件-->
|
||||
<!--将日志输出到可切分的文件,将昨天的日志添加到fileNamePattern配置的文件中-->
|
||||
<appender name="ROLL_APP" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/roll-back.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${log.path}/bak/logback.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
|
||||
<!-- 日志在磁盘上保留天数 -->
|
||||
<maxHistory>30</maxHistory>
|
||||
<totalSizeCap>1GB</totalSizeCap>
|
||||
<totalSizeCap>10KB</totalSizeCap>
|
||||
</rollingPolicy>
|
||||
<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>
|
||||
</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">
|
||||
<discriminator>
|
||||
|
@ -44,17 +70,17 @@
|
|||
<!-- 日志文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
|
||||
<!-- 文件名:logs/project_info.2017-12-05.0.log -->
|
||||
<!-- 注意: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,则单位为天
|
||||
如果上面选用了yyyy-MM,则单位为月,另外上面的单位默认为yyyy-MM-dd-->
|
||||
<maxHistory>30</maxHistory>
|
||||
<!-- 每个日志文件到10mb的时候开始切分,最多保留30天,但最大到20GB,哪怕没到30天也要删除多余的日志 -->
|
||||
<totalSizeCap>20GB</totalSizeCap>
|
||||
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成5KB看效果 -->
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</rollingPolicy>
|
||||
<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>
|
||||
</encoder>
|
||||
|
@ -65,8 +91,7 @@
|
|||
<!--根节点的输出日志定义-->
|
||||
<root level="debug">
|
||||
<appender-ref ref="STDOUT" />
|
||||
<!-- <appender-ref ref="ROLL_APP" />-->
|
||||
<appender-ref ref="SIFT_APP" />
|
||||
<appender-ref ref="ASYNC_APP" />
|
||||
</root>
|
||||
|
||||
<!--自定义输出日志,该日志会继承<root>节点的appender,如果自己在添加appender会输出双份日志-->
|
||||
|
|
Loading…
Reference in New Issue