gpt4 book ai didi

java - 使用 Logback 在每个日志文件的开头添加表达式

转载 作者:行者123 更新时间:2023-12-01 16:47:25 25 4
gpt4 key购买 nike

我有一个包含多个模块的项目。每个模块都有自己的logback.xml。他们的附加程序正在滚动文件。如何在每个输出日志文件的开头添加特定表达式?

最佳答案

您可以向 (Rolling)FileAppender 创建的每个文件添加 header 。

以下配置将实现此目的:

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>target/test.log</file>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<fileHeader>Your File Header ...</fileHeader>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</layout>
</encoder>
</appender>

通过上述配置,以下文本将出现在 Logback 子系统的任何实例写入给定文件的第一行之前:

Your File Header ...

注意:如果您的应用程序重新启动(或 Logback 在您的应用程序中重新初始化),则 PatternLayout 将再次写入该 header ,以便您最终得到包含以下内容的日志文件:

Your File Header ...
11:11:59.589 [main] INFO o.g.sandbox.logback.LogbackTest - hello!
Your File Header ...
11:12:12.352 [main] INFO o.g.sandbox.logback.LogbackTest - hello!

为了避免这种情况,您可以编写自己的布局或 Appender。下面是一个扩展 FileAppender 的简单示例:

public class FileAppenderWithHeader extends FileAppender {

private String header;

public String getHeader() {
return header;
}

public void setHeader(String header) {
this.header = header;
}

@Override
public void openFile(String fileName) throws IOException {
super.openFile(fileName);
File activeFile = new File(getFile());
if (activeFile.exists() && activeFile.isFile() && activeFile.length() == 0) {
write((header + "\n").getBytes());
}
}

private void write(byte[] byteArray) throws IOException {
if (byteArray == null || byteArray.length == 0)
return;

lock.lock();
try {
super.getOutputStream().write(byteArray);
if (super.isImmediateFlush()) {
super.getOutputStream().flush();
}
} finally {
lock.unlock();
}
}
}

您可以像这样配置:

<appender name="FILE" class="org.glytching.sandbox.logging.FileAppenderWithHeader">
<file>target/test.log</file>
<header>Your File Header ...</header>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>

此附加程序创建的每个文件都将以这一行开头(无论附加程序启动/停止多少次):

Your File Header ...

关于java - 使用 Logback 在每个日志文件的开头添加表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47529682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com