logback扩展日志输出功能

常用的日志输出框架除了log4j2,还有logback,它们都是出于同一作者,这里有一篇网友的介绍:

https://www.cnblogs.com/ryelqy/p/10314147.html,同样,logback日志信息的处理扩展与log4j2

相同,同样是将所有日志信息进行大写转换,步骤如下:

1、利用idea开发工具创建一个空的Maven工程,工程名称随便填写,这里写为LogExtention

2、选定LogExtention工程,右键创建一个module,名称记为common,用于定义功能类,这些功能类会处理日志信息,

如下图:

 
 3、创建日志输出功能拓展工程模块logback-extend,创建过程同上,pom依赖内容如下:

<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!--日志信息处理功能依赖-->
<dependency>
<groupId>org.example</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>

同样需要定义一个功能拓展类,需要继承MessageConverter类,定义如下:
package logback.extend;

import ch.qos.logback.classic.pattern.MessageConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import common.fun.CommFun;

public class LogbackExtend extends MessageConverter {
@Override
public String convert(ILoggingEvent event) {
String oriLogMsg = event.getFormattedMessage();
if (oriLogMsg!=null) {
return CommFun.convert(event.getFormattedMessage());
} else {
return null;
}
}
}
这里CommFun.convert是我们在common模块中定义的功能函数,可以对msg做一些特殊处理。程序结构如下图:

 以上模块定义完毕后,对日志信息扩展处理功能算是完毕,下一步就是功能引用。

4、创建一个logTest模块,为了打印方便起见,引入spring-boot-starter-web,这样我们在resources中定义的

logback-spring.xml配置文件会直接被系统解析到,logTest模块的pom依赖如下:

<dependencies>
<!--日志拓展模块-->
<dependency>
<groupId>org.example</groupId>
<artifactId>logback-extend</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--springboot模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.4.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

然后在resources文件夹下创建logback-spring.xml配置文件,文件内容定义如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<!--定义扩展规则-->
<conversionRule conversionWord="msg"
converterClass="logback.extend.LogbackExtend" />
<property scope="context" name="AppName" value="${APP_NAME}" />
<property scope="context" name="ServerName"
value="${SERVER_NAME}" />
<property name="server.log.pattern"
value="%msg%n" />
<appender name="console"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${server.log.pattern}</pattern>
</encoder>
</appender>

<root level="INFO">
<!-- 日志输出到控制台 -->
<appender-ref ref="console" />
</root>
</configuration>

注意上面的conversionRule元素配置内容就是我们定义的logback-extend模块中的扩展类,上面的配置只是简单

地将日志信息输出到控制台,然后创建一个简单的controller来输出日志内容,定义如下:

package log.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping
public class Controller {
Logger logger= LoggerFactory.getLogger(Controller.class);

@GetMapping("/hello")
public String hello(String str){
System.out.println("msg before processing is "+str);
logger.info(str);
return str;
}
}
以上定义完后,运行springboot启动类,在浏览器窗口中输入http://localhost:8080/hello?str=helloworld,
会看到idea console控制台输入内容如下:

msg before processing is helloworld
msg after processing is HELLOWORLD

说明整个配置已经生效了,这是一个logback扩展日志输出功能的最简版,如果需要对日志信息做特殊处理,则只需

在common模块中追加功能即可。

 
原文地址:https://www.cnblogs.com/codeMedita/p/15203256.html