gpt4 book ai didi

java - 自定义 log4j 滚动附加程序

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:20 24 4
gpt4 key购买 nike

我的类代码如下。

public class LogLevelFilterFileAppender extends FileAppender implements Cloneable{

private final static String DOT = ".";
private final static String DASH = "-";
private static final String ORIGINAL_FILE_NAME = "OrginalLogFileName";

public LogLevelFilterFileAppender() {}

public LogLevelFilterFileAppender(Layout layout, String fileName,
boolean append, boolean bufferedIO, int bufferSize)
throws IOException {
new FileAppender(layout, fileName, append, bufferedIO, 10);
new RollingFileAppender(layout, fileName,append);
}

public LogLevelFilterFileAppender(Layout layout, String fileName,
boolean append) throws IOException {
super(layout, fileName, append);
new RollingFileAppender(layout, fileName,append);
}

public LogLevelFilterFileAppender(Layout layout, String fileName)
throws IOException {
super(layout, fileName);
new RollingFileAppender(layout, fileName);
}

@Override
public void activateOptions() {
MDC.put(ORIGINAL_FILE_NAME, fileName);
super.activateOptions();
}

@Override
public void append(LoggingEvent event) {
try {
setFile(appendLevelToFileName((String) MDC.get(ORIGINAL_FILE_NAME),
event.getLevel().toString()), fileAppend, bufferedIO,
bufferSize);
}
catch (IOException ie) {
errorHandler
.error(
"Error occured while setting file for the log level "
+ event.getLevel(), ie,
ErrorCode.FILE_OPEN_FAILURE);
}
super.append(event);
}

private String appendLevelToFileName(String oldLogFileName, String level) {
if (oldLogFileName != null) {
final File logFile = new File(oldLogFileName);
String newFileName = "";
final String fn = logFile.getName();
final int dotIndex = fn.indexOf(DOT);
if (dotIndex != -1) {
newFileName = fn.substring(0, dotIndex) + DASH + level + DOT
+ fn.substring(dotIndex + 1);
}
else {
newFileName = fn + DASH + level;
}
return logFile.getParent() + File.separator + newFileName;
}
return null;
}
}

而我对log4j.properties的配置如下。

log4j.rootLogger = DEBUG, fileout
log4j.appender.fileout = com.elitecore.mediation.util.log.LogLevelFilterFileAppender
log4j.appender.fileout.layout.ConversionPattern = %d{MMMMM dd,yyyy HH:mm:ss} %-5p [ %C{1} - %M() - %L ] - %m%n
# log4j.appender.fileout.layout.ConversionPattern = %d{MMMMM dd,yyyy HH:mm:ss} %-5p %c %M():%L - %m%n
# %r [%t] %-5p %c %x - %m%n
# %d{MMMMM dd HH:mm:ss} %-5p %c %M():%L - %m%n
#%d{MMMMM dd HH:mm:ss} %6p %c %M() : %m%n
log4j.appender.fileout.layout = org.apache.log4j.PatternLayout
log4j.appender.fileout.File = /usr/local/mediation/logs/mediation-logs.log

这是在不同的日志文件中创建不同类型的日志,例如 DEBUG、ERROR 和 INFO。但它有什么限制呢?它正在创建越来越大的日志文件。我想制作 5 MB 的日志文件,并且应该删除以前的日志。我怎样才能做到这一点?当我尝试使用 RollingFile Appender 时,我只得到以下日志文​​件。

[root@manage logs]# ls -1
mediation-logs-DEBUG.log
mediation-logs-ERROR.log
mediation-logs-INFO.log
mediation-logs-INFO.log.1
mediation-logs-INFO.log.2
mediation-logs.log

日志文件滚动 ERRORDEBUG 未完成,但 INFO 已完成。

最佳答案

我建议你派生自 RollingFileAppender而不是 FileAppender。这将使您有可能定义日志文件将增长到多大,以及要保留多少“旧”文件。查看the manual稍后如何在您的 log4j.propertiers 中使用它。

如果我没理解错的话,你希望每个日志级别一个文件,对吗?如果是这样,我建议您遵循此 FAQ-Entry 而不是“滚动”您自己的解决方案:)

Matching exact log-levels

关于java - 自定义 log4j 滚动附加程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124264/

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