내 클래스 코드는 다음과 같습니다.사용자 지정 log4j 롤링 appender
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를 사용해 보았을 때 아래의 로그 파일 만 받았습니다. 로그 파일 ERROR
의
[[email protected] 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
롤링, DEBUG
이 수행되지 않지만 INFO
이 이루어집니다.
내가 RollingFileAppender와 노력에 따라 제안한다. 하지만 내 문제는 로깅이 끝나면 로깅에 오류가 발생한다는 것입니다. 아래에서 설명한 것처럼 INFO 로그 만 롤링됩니다. '# 1! [루트 @는 로그를 관리] -1 중재-로그-debug.log를을 중재-로그-하는 error.log 중재 - 로그 - INFO.log 중재 - 로그 - INFO.log.1 중재-로그 -INFO.log.2 mediation-logs.log' –
@BhavikAmbani 오류 메시지의 위치는 어디입니까? – quaylar
@BhavikAmbani 어쩌면 디버그 및 오류가 롤오버 될 정도로 크지 않았습니까? RollingFileAppender의 클래스는 어떻게 생겼습니까? – quaylar