logback 替换日志中的类名
在Logback中,你可以通过自定义一个`Converter`来改变日志输出中的类名格式。`Converter`是Logback中用于将事件数据转换为字符串的组件。以下是创建自定义类名格式的步骤:
1. **创建一个Converter类**:这个类需要实现`ch.qos.logback.classic.spi.IThrowableProxyConverter`接口或继承`ch.qos.logback.classic.pattern.ClassicConverter`类。
2. **实现`convert`方法**:在这个方法中,你将定义如何从`ILoggingEvent`对象中提取类名,并按照你的需求格式化它。
3. **注册Converter**:在你的Logback配置文件中注册你的Converter。
下面是一个简单的示例,展示了如何创建一个自定义Converter来输出类名的最后一个部分(即简单类名):
```java
import ch.qos.logback.classic.pattern.ClassOfCallerConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
public class CustomClassOfCallerConverter extends ClassOfCallerConverter {
@Override
public String convert(ILoggingEvent event) {
String className = super.convert(event);
if (className != null) {
int lastDotIndex = className.lastIndexOf('.');
if (lastDotIndex != -1) {
return className.substring(lastDotIndex + 1);
}
}
return className;
}
}
```
然后,在你的Logback配置文件中,你可以使用这个自定义的Converter:
```xml
<configuration>
<conversionRule conversionWord="customLogger" converterClass="your.package.CustomClassOfCallerConverter"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %customLogger{1} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
```
在这个配置中,`%customLogger`是你定义的转换词(conversionWord),它将被替换为你的自定义Converter的输出。`{1}`参数是可选的,可以用来指定你想要输出的类名部分,类似于`%logger{1}`的用法。
请确保将`your.package`替换为你的Converter类的实际包名。这样,Logback就会使用你的Converter来格式化类名,并按照你定义的方式输出到日志中。
或者 :
<conversionRule conversionWord="customLogger" converterClass="com.xxx.CustomClassOfCallerConverter"/>
<property name="LOG_PATTERN" value="[%d] [%t] [%-5p] [%customLogger]- %m%n"/>
--------------
logback的pattern配置
转换字符 | 效果 |
---|---|
%logger | 生成类名称,假设logger的名字为com.hello.rachel.service.SayService %logger{0} ---> SayService %logger{10} ---> c.h.r.s.SayService %logger{25} ---> c.h.rachel.service.SayService |
%d{pattern}或%date | 生成日期: %d ---> 2022-07-05 19:00:00,000 |
%caller | 生成日志调用者的位置信息,依赖JVM实现 %caller{2} ---> 0 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17) |
%line 或 %L | 生成日志请求所在的行号 |
%m 或 %msg 或 %message | 生成日志具体信息 |
%n | 行分隔符 |
%p 或 %level | 生成日志级别 |
%t 或 %thread | 生成日志事件的线程名 |
%X{key:-defaultVal} 或 %mdc | 生成日志事件线程的MDC内容 |
%replace(p) | 在子模式p产生的字符中,将所有出现正则表达式r的地方替换成t |