Custom application downloadable log4j

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 # 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 

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.

+4
source share
1 answer

I suggest you get RollingFileAppender instead of FileAppender. This will give you the opportunity to determine how much the log file will grow, and how many "old" you want to keep. Check out the manual on how to use it later in the log4j.propertiers files.

If I understand correctly, you need one file at the log level, is that right? If so, I suggest you follow this frequently asked frequency, rather than "rolling" your own solution :)

Matching exact log levels

+1
source

Source: https://habr.com/ru/post/1394546/


All Articles