Peg*_*ahK 0 java logging logback
我有一个包含多个模块的项目。每个模块都有自己的logback.xml。他们的附加程序是滚动文件。如何在每个输出日志文件的开头添加特定的表达式?
您可以将标题添加到由创建的每个文件中(Rolling)FileAppender。
以下配置将实现此目的:
<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>
Run Code Online (Sandbox Code Playgroud)
通过上述配置,Logback子系统的任何实例在写入给定文件的第一行之前,将出现以下文本:
Your File Header ...
Run Code Online (Sandbox Code Playgroud)
注意:如果您的应用程序重新启动(或在应用程序中重新初始化了Logback),则PatternLayout将会再次写入该标头,因此您可能最终得到一个具有以下内容的日志文件:
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!
Run Code Online (Sandbox Code Playgroud)
为了避免这种情况,您可以编写自己的Layout或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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以这样配置:
<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>
Run Code Online (Sandbox Code Playgroud)
并且此附加程序创建的每个文件都将从此行开始(无论附加程序启动/停止了多少次):
Your File Header ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
698 次 |
| 最近记录: |