My class code is as follows.
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; } }
And my log4j.properties configuration is as follows.
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
This creates a log for different types, for example, DEBUG, ERROR, and INFO in different log files. But what is the limitation? It creates large and large log files. I want to make log files from, say, 5 MB, and previous logs should be deleted. How can i do this? When I try to use the RollingFile Appender, I only get log files.
[ 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 log files are not moved, but INFO is being executed.