仅供自己理解,可能不对,自我掌握
- 昨天使用logback对日志进行分离,以前也有logback,但是只能生成一个大的,后来增加了很多socket接收数据问题,很大了,需要分开
- 写下logback的认识,官网 http://logback.qos.ch/documentation.html
- logback主要分为3个部分 configuration appender logger root
3.1)configuration应该可以说是一个根目录了 主要有2个属性 scan scanPeriod
Scan=”true”是否扫描,是 scanPeriod=”60 seconds”:扫描频率 60秒一扫描
3.2)appender: 他有2个属性 name class
Name是给这个appender起个名字 class则是使用哪个类进行日志增加
ch.qos.logback.core.ConsoleAppender 这个是打印到控制台 类似System.out.println
ch.qos.logback.core.FileAppender 输出到文件
ch.qos.logback.core.rolling.RollingFileAppender rolling滚动意思 这个是滚动输出日志的意思
ch.qos.logback.classic.sift.SiftingAppender 分割日志的意思
3.3)logger
Logger就2个属性一个指向 name level appender-ref
Name:在logger的意思跟其它的name的意思不一样,这里指的是使用日志的java中的类或者包的路径 level指的是日志级别 debug info error等
<appender-ref ref=”appendername”/> 它指向使用哪个appender 应该可以理解为这个类或者这个包下使用哪个appender
3.4)root 其实就是logger 只不过是根logger
3.5)重点讲下SiftingAppender 分割日志
在我们自己的类中写入 org.slf4j.MDC.put(“userid”,userid);
Logger.info(“this is test siftingappender”);
org.slf4j.MDC.remove(“userid”);
注意这里的是slf4j的mdc而不是其他的mdc
SiftingAppender 他下面有个子节点discriminator(辨别)discriminator 下有2个子节点key和defaultValue 其实就是定义与MDC关联的变量key=userid defaultValue需要我们随便给个值,不过最好是有意义的
SiftingAppender 下有个sift字节点这个子节点可以按照appender进行配置
3.6)RollingFileAppender 我们一般使用这个类
<appender name="mdcfilelog" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>companyname</key>
<defaultValue>xiaomi</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${companyname}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${companyname}.log</file> 这个是我们生成的文件名称mdc对应不同的公司名称
<append>true</append> 日志都是不断追加
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</pattern> 日志文件格式
</layout>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 使用按时间滚动模式
<FileNamePattern>${companyname}_%d{yyyy-MM-dd}.log</FileNamePattern> 这里按天
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory> 最大保存30天
</rollingPolicy>
</appender>
</sift>
</appender>
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
<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{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="rollfilelog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>rollfile.log</File>
<append>true</append>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>rollfile_%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<appender name="mdcfilelog" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>companyname</key>
<defaultValue>xiaomi</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${companyname}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${companyname}.log</file>
<append>true</append>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</pattern>
</layout>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${companyname}_%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
</sift>
</appender>
<appender name="SIFTTASK" class="ch.qos.logback.classic.sift.SiftingAppender">
<!--discriminator鉴别器,根据taskId这个key对应的value鉴别日志事件,然后委托给具体appender写日志-->
<discriminator>
<key>taskId</key>
<defaultValue>default</defaultValue>
</discriminator>
<sift>
<!--具体的写日志appender,每一个taskId创建一个文件-->
<appender name="File-${taskId}" class="ch.qos.logback.core.FileAppender">
<file>d:/log/${taskId}/info.log</file>
<append>true</append>
<encoder charset="UTF-8">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>
<!--应用于该包路径的日志-->
<logger name="com.wang.logback.task" level="INFO">
<appender-ref ref="SIFTTASK"/>
</logger>
<logger name="com.wang.logback.file" level="debug" additivity="fasle" >
<appender-ref ref="rollfilelog"></appender-ref>
</logger>
<logger name="com.wang.logback.mdc" level="debug" additivity="fasle" >
<appender-ref ref="mdcfilelog"></appender-ref>
</logger>
<root devel="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>