logback 配置文件编写
Logback 配置
本文講logback的xml文件的配置,其中主要是在介紹各類appender。logback 的簡單例子
xml文件大概結(jié)構(gòu) 導(dǎo)圖鏈接
xml
<?xml version="1.0" encoding="UTF-8"?> <configuration><contextName>拽拽壞人幫</contextName><!--輸出到控制臺 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%cn %d{hh:MM:ss} [%20logger{0}] - %message%n</pattern></encoder></appender><logger name = "com.cck.MyLogback"><appender-ref ref = "STDOUT"/></logger><root level="debug"></root></configuration>代碼使用
public class MyLogback {private final static Logger logger = LoggerFactory.getLogger("com.cck.MyLogback");public static void main(String[] args) {logger.info("hello world");} }xml配置中的appender
appender 節(jié)點是配置日志的目的地,該節(jié)點必須指定name和class屬性,不同的class會有不同的子節(jié)點。分別有以下幾種類型的appender
- ConsoleAppender 控制臺
- FileAppender 文件
- RollingFileAppender 滾動記錄文件
- SiftingAppender 自定義篩選文件
1. ConsoleAppender 控制臺
xml
<?xml version="1.0" encoding="UTF-8"?> <configuration><contextName>拽拽壞人幫</contextName><!--輸出到控制臺 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%cn -%.-1p %d{hh:MM:ss} [%8logger{26}] - %message%n</pattern></encoder><targer>System.err</target></appender><logger name="com.cck.MyLogback"><appender-ref ref="STDOUT" /></logger><root level="debug"></root> </configuration> <target>String</target> 用于指定字符串在控制臺的打印方式默認是 System.out, 也可以是System.err
2. FileAppender 文件
xml
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"><contextName>拽拽壞人幫</contextName><!--輸出到文件 --><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>logback.log</file><encoder><pattern>%cn -%.-1p %d{hh:MM:ss} [%8logger{26}] - %message%n</pattern></encoder><append>true</append><prudent>true</prudent></appender><logger name="com.cck.MyLogback" level="debug"><appender-ref ref="FILE" /></logger><root level="info"></root> </configuration> <file>logback.log</file> 指定日志文件名<append>true</append> 日志是否追加到文件結(jié)尾,默認是true
<prudent>true</prudent> true的情況下,日志會被安全地寫入到文件 (加了鎖,因為存在多個FileAppender同時向日志文件寫入的情況),默認是false
3. RollingFileAppender 滾動記錄文件
3.1 滾動記錄文件 -- 根據(jù)時間 TimeBasedRollingPolicy
xml
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"><contextName>拽拽壞人幫</contextName><!--滾動記錄文件 根據(jù)時間 --><appender name="timeRollFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>%cn -%.-1p %d{hh:MM:ss} [%8logger{26}] - %message%n</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>logFile/%d{yyyy/MM/dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy></appender><logger name="com.cck.MyLogback" level="debug"><appender-ref ref="timeRollFile" /></logger><root level="info"></root> </configuration> <rollingPolicy></rollingPolicy> 指定滾動行為rollingPolicy 子節(jié)點 <fileNamePattern></fileNamePattern> 指定文件名模式, yyyy/mm/dd 表示按天滾動 模式例子
<maxHistory>30</maxHistory> 控制保存的最大文件數(shù)量
如果是每天滾動<maxHistory>30</maxHistory>表示保存最近30天的日志文件
3.2 滾動記錄文件 -- 根據(jù)長度 FixedWindowRollingPolicy
xml
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"><contextName>拽拽壞人幫</contextName><!--滾動記錄文件 根據(jù)固定長度 --><appender name="fixedRollFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>testFixedRollFile.log</file><encoder><pattern>%d{hh:MM:ss} [%20logger{0}] - %message%n</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>logFile/logFile.%i.log</fileNamePattern><minIndex>1</minIndex><maxIndex>5</maxIndex></rollingPolicy><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>1KB</maxFileSize></triggeringPolicy></appender><logger name="com.cck.MyLogback" level="debug"><appender-ref ref="fixedRollFile" /></logger><root level="info"></root> </configuration> <rollingPolicy></rollingPolicy> 指定根據(jù)窗口長度進滾動。注意,使用 FixedWindowRollingPolicy 必須聲明<file></file>節(jié)點
rollingPolicy 子節(jié)點 <fileNamePattern></fileNamePattern> 指定命名模式
注意,必須包含%i,i 為窗口索引。
滾動時,日志文件名為logFile/logFile'i'.log
eg .logFile/logFile1.log logFile/logFile2.log
rollingPolicy 子節(jié)點 <minIndex>1</minIndex> 指定 i 的最小值
rollingPolicy 子節(jié)點 <maxIndex>5</maxIndex> 指定 i 的最大值
<triggeringPolicy></triggeringPolicy > 指定何時滾動
triggeringPolicy 子節(jié)點 <maxFileSize>1KB</maxFileSize> 指定文件大小為 1KB 時進行滾動
4. SiftingAppender 自定義篩選文件
假設(shè)有以下需求
userId 是6位的,現(xiàn)在想讓前4位id相同的用戶的日志放在一個文件夾中。并且id為 000000 單獨拿出來。 也就是以下的效果:/000000.log/0001/01.log/23.log/0002/12.log/00.log第一步,按照業(yè)務(wù)需求編寫Java類
package com.cck; import java.util.Map; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.sift.AbstractDiscriminator; public class MyLoggerDiscriminator extends AbstractDiscriminator<ILoggingEvent> { public final static String KEY = "user"; private String filePath; private String fileName; private String defaultValue = "000000"; public String getDefaultValue() { return defaultValue; } public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } @Override public String getDiscriminatingValue(ILoggingEvent e) { // 拿到mdc Map<String, String> mdc = e.getMDCPropertyMap(); String user = mdc.get(KEY); if(user == null || user == "000000") { return defaultValue; } // 返回一個路徑 filePath = user.substring(0, 4) + "/"; fileName = user.substring(4, 6); return filePath + fileName; } @Override public String getKey() { return KEY; } }第二步,在xml使用
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <contextName>拽拽壞人幫</contextName> <!-- 自定義 --> <appender name="siftingLog" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator class="com.cck.MyLoggerDiscriminator" /> <sift> <appender name="user-${user}" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>siftingLog/${user}.log</file> <encoder> <pattern>%date{HH:mm:ss} %.-1level[%25logger{0}] - <%message>%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>siftingLog/${user}.%d{yyyy-MM-dd}.log.gz</fileNamePattern> </rollingPolicy> </appender> </sift> </appender> <logger name="com.cck.MyLogback" level="debug"> <appender-ref ref="siftingLog" /> </logger> <root level="info"></root> </configuration> <discriminator class="com.cck.MyLoggerDiscriminator" /> 指定自定自定義的鑒別類第三步,使用
package com.cck; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC;public class MyLogback {private final static Logger logger = LoggerFactory.getLogger("com.cck.MyLogback");public static void main(String[] args) {MDC.put(MyLoggerDiscriminator.KEY, "156651");logger.debug("hello world");} }總結(jié)
以上是生活随笔為你收集整理的logback 配置文件编写的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 22、《每天5分钟玩转Docker容器技
- 下一篇: vue-electron 写一个mark