自定义Loaback-Appender

前言

本篇主要讲如何自定义lagback日志输出

简单实现

  1. 创建一个空的 springboot 项目
  2. 自定义 Appender
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.example.logback.appender;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;
import ch.qos.logback.core.Layout;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class MyLogbackAppender extends AppenderBase<ILoggingEvent> {

Layout<ILoggingEvent> layout;

//自定义配置
String printString;



@Override
public void start(){
//这里可以做些初始化判断 比如layout不能为null ,
if(layout == null) {
addWarn("Layout was not defined");
}
//或者写入数据库 或者redis时 初始化连接等等
super.start();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {

@Override
public void run() {
// 执行资源释放操作

}
}));
}


@Override
public void stop()
{
//释放相关资源,如数据库连接,redis线程池等等
System.out.println("logback-stop方法被调用");
if(!isStarted()) {
return;
}
super.stop();
}

@Override
public void append(ILoggingEvent event) {
if (event == null || !isStarted()){
return;
}
// 此处自定义实现输出
// 获取输出值:event.getFormattedMessage()
// System.out.print(event.getFormattedMessage());
// 格式化输出
System.out.print(printString + ":" + layout.doLayout(event));

}
}
  1. 将自定义的appender配置到 logback-spring.xml后启动 springboot 项目, 即可看到自定义的日志输出。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
<property name="LOG_HOME" value="/home" />
<!-- 控制台输出 -->
<appender name="MyLogback" class="com.example.logback.appender.MyLogbackAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 日志收集最低日志级别 -->
<level>INFO</level>
</filter>
<layout
class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</layout>
<!-- 自定义参数 -->
<printString>当我遇上你(logback)</printString>
</appender>

<!-- 自定义包下设置为INFO,则可以看见输出的日志不包含debug输出了 -->
<logger name="cn.lqdev.learning" level="INFO" />

<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="MyLogback" />
</root>

<!-- <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> -->
</configuration>

最后

本文到此结束,感谢阅读。如果您觉得不错,请关注公众号【当我遇上你】,您的支持是我写作的最大动力。

参考