java – 自定义log4j滚动appender
发布时间:2020-12-15 02:31:18 所属栏目:Java 来源:网络整理
导读:我的班级代码如下. public class LogLevelFilterFileAppender extends FileAppender implements Cloneable{ private final static String DOT = "."; private final static String DASH = "-"; private static final String ORIGINAL_FILE_NAME = "OrginalLo
我的班级代码如下.
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,append); } public LogLevelFilterFileAppender(Layout layout,boolean append) throws IOException { super(layout,append); new RollingFileAppender(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,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 滚动日志文件ERROR,DEBUG未完成,但INFO已完成. 解决方法
我建议你从
RollingFileAppender而不是FileAppender派生.这将使您可以定义日志文件的增长量以及要保留的“旧”文件数量.关于如何在log4j.propertiers中使用它,请查看
the manual.
如果我理解正确,你需要每个日志级别一个文件,这是正确的吗?如果是这样,我建议你按照这个FAQ-Entry而不是“滚动”你自己的解决方案:) Matching exact log-levels (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |