在 Apache Log4J 中,有没有一种方法可以简单地即时创建多个日志文件,而不是附加到一个日志文件?
In Apache Log4J, Is there a way to simply create multiple log files on the fly, rather than appending to one log file?
我有一个程序,我希望能够将每条日志消息分离到它自己的日志文件中。
因此,如果 class 在单个程序执行中生成 10 个 ERROR
日志和 10 个 DEBUG
日志,那么应该创建 20 个日志文件,它们的名称可以理想情况下是这样的:
logoutput1
logoutput2
logoutput3
..etc
而且每个日志文件只有一行。
我正在做一个项目,我想实现一些自主能力——想法是我们可以有第三个外部 运行 程序,它可以读取这些日志文件(然后根据它们做出反应)
Log4j 可以吗?如何才能做到这一点 ?
谢谢!
是的,您可以使用 RoutingAppender。有关详细信息,请参阅此问题:Log4j2: Dynamic creation of log files for multiple logs
编写您自己的日志文件附加程序,并在每次尝试写入一些日志时创建一个新文件。以下代码可能对您有所帮助。
public class SingleLogMsgFileAppender extends FileAppender {
private String file = null;
private static long fileNo;
public SingleLogMsgFileAppender() {
super();
fileNo = 1;
}
@Override
protected void subAppend(LoggingEvent event) {
createNewFile(true);
synchronized (this) {
super.subAppend(event);
}
}
@Override
public void setFile(String file) {
this.file = file;
createNewFile(false);
}
public void createNewFile(boolean incrementFileNo) {
try {
String fileName = file + "testlogfile." + fileNo + ".log";
super.setFile(fileName);
super.activateOptions();
} catch (Exception e) {
e.printStackTrace();
}
if (incrementFileNo) {
fileNo++;
}
}
}
这是 log4j 配置文件
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="CustomAppender" class="loga.randd.threads.log4j.SingleLogMsgFileAppender">
<param name="File" value="log/" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{MM_dd_yyyy HH_mm_ss}%m%n" />
</layout>
</appender>
<root>
<priority value="debug" />
<appender-ref ref="CustomAppender" />
</root>
</log4j:configuration>
我有一个程序,我希望能够将每条日志消息分离到它自己的日志文件中。
因此,如果 class 在单个程序执行中生成 10 个 ERROR
日志和 10 个 DEBUG
日志,那么应该创建 20 个日志文件,它们的名称可以理想情况下是这样的:
logoutput1
logoutput2
logoutput3
..etc
而且每个日志文件只有一行。
我正在做一个项目,我想实现一些自主能力——想法是我们可以有第三个外部 运行 程序,它可以读取这些日志文件(然后根据它们做出反应)
Log4j 可以吗?如何才能做到这一点 ? 谢谢!
是的,您可以使用 RoutingAppender。有关详细信息,请参阅此问题:Log4j2: Dynamic creation of log files for multiple logs
编写您自己的日志文件附加程序,并在每次尝试写入一些日志时创建一个新文件。以下代码可能对您有所帮助。
public class SingleLogMsgFileAppender extends FileAppender {
private String file = null;
private static long fileNo;
public SingleLogMsgFileAppender() {
super();
fileNo = 1;
}
@Override
protected void subAppend(LoggingEvent event) {
createNewFile(true);
synchronized (this) {
super.subAppend(event);
}
}
@Override
public void setFile(String file) {
this.file = file;
createNewFile(false);
}
public void createNewFile(boolean incrementFileNo) {
try {
String fileName = file + "testlogfile." + fileNo + ".log";
super.setFile(fileName);
super.activateOptions();
} catch (Exception e) {
e.printStackTrace();
}
if (incrementFileNo) {
fileNo++;
}
}
}
这是 log4j 配置文件
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="CustomAppender" class="loga.randd.threads.log4j.SingleLogMsgFileAppender">
<param name="File" value="log/" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{MM_dd_yyyy HH_mm_ss}%m%n" />
</layout>
</appender>
<root>
<priority value="debug" />
<appender-ref ref="CustomAppender" />
</root>
</log4j:configuration>