1.引入依赖(springboot 已集成)
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.3</version>
</dependency>
2.一个实例
static Logger logger = (Logger) LoggerFactory.getLogger(Text.class);
public static void main(String[] args) throws InterruptedException {
String str = "hello hello";
Text.logger.info(str);
}
getLogger(Text.class) 定义日志名,一般为com.xxx.类名,其自带一个日志记录器root为根记录器,根据包名可进行分级,类比与类的继承关系,用户自定义的记录器level未定义继承上级,所以当配置了记录器实例后出现重复打印的问题,只需在xml记录器中添加记录器可加性additivity为false
3.配置xml(带自动提示功能)
<configuration xmlns="http://ch.qos.logback/xml/ns/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<configuration>
ps:该功能需要下载,alt+enter 最后一行。
4. 配置appder
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are by default assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.Text" level="debug">
<appender-ref ref="STDOUT"/>
</logger>
5.自定义appder
package com;
import ch.qos.logback.core.UnsynchronizedAppenderBase;
import ch.qos.logback.core.encoder.Encoder;
import java.io.File;
import java.io.FileOutputStream;
/**
* @Classname MyAppender
* @Description TODO
* @Date 2022/10/20 15:28
* @Created by JLIU
*/
public class MyAppender<E> extends UnsynchronizedAppenderBase<E> {
private Encoder encoder;
private String file;
public void setEncoder(Encoder encoder) {
this.encoder = encoder;
}
public void setFile(String file) {
this.file = file;
}
@Override
protected void append(E e) {
byte[] encode = this.encoder.encode(e);
try {
System.out.println(new String(encode,"utf-8"));
File f = new File(this.file);
FileOutputStream outputStream = new FileOutputStream(f,true);
outputStream.write(encode);
outputStream.close();
} catch (Exception unsupportedEncodingException) {
unsupportedEncodingException.printStackTrace();
}
}
}
<appender name="MyAppender" class="com.MyAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<file>u.log</file>
</appender>
<logger name="com.Text" level="debug">
<appender-ref ref="MyAppender"/>
</logger>
6.自定义fliter
package com;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
/**
* @Classname MyFilter
* @Description TODO
* @Date 2022/10/20 15:55
* @Created by JLIU
*/
public class MyFilter extends Filter<ILoggingEvent> {
private String key;
public void setKey(String key) {
this.key = key;
}
@Override
public FilterReply decide(ILoggingEvent iLoggingEvent) {
boolean contains = iLoggingEvent.getMessage().contains(key);
return contains?FilterReply.ACCEPT:FilterReply.DENY;
}
}
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are by default assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<filter class="com.MyFilter">
<key>succ</key>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="com.Text" level="debug">
<appender-ref ref="STDOUT"/>
</logger>
7.总结一般常用的配置
<configuration xmlns="http://ch.qos.logback/xml/ns/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are by default assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<filter class="com.MyFilter">
<key>succ</key>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="FILEOUT" class="ch.qos.logback.core.FileAppender">
<!-- encoders are by default assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<file>log.log</file>
</appender>
<!-- 基于时间的滚动-->
<appender name="FileRouilingT" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>my.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<!-- 时间策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log_%d{yyyy-MM-dd HH-mm-ss}.log</fileNamePattern>
<!-- 最大保留文件数-->
<maxHistory>3</maxHistory>
<!-- 文件总大小上限-->
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 基于时间和大小的滚动-->
<appender name="FileRouilingTD" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>my.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<!-- 时间策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 文件超过时从0编号文件-->
<fileNamePattern>log_%d{yyyy/MM-dd}.%i.log</fileNamePattern>
<!-- 最大保留yyyy/MM-dd文件数不是3个文件-->
<maxHistory>3</maxHistory>
<!-- 文件总大小上限-->
<totalSizeCap>5GB</totalSizeCap>
<!-- 文件大小上限-->
<maxFileSize>1KB</maxFileSize>
</rollingPolicy>
</appender>
<appender name="MyAppender" class="com.MyAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<file>u.log</file>
</appender>
<logger name="com.Text" level="debug">
<appender-ref ref="STDOUT"/>
</logger>
</configuration>