Java – Custom log4j scrolling appender

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,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;
    }
}

My log4j The 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 is to create logs for different types, such as debug, error and info in different log files But what are its limitations? It is creating larger and larger log files I want to create a 5 MB log file and delete the previous log How can I do this? When I try to use rollingfile appender, I only get the following 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

Rolling log file error, debug is not completed, but info is completed

Solution

I suggest you derive from rollingfileappender instead of fileappender This will allow you to define the growth of log files and the number of "old" files to keep About how to in log4j To use it in properties, please check the manual

If I understand correctly, you need one file for each log level. Is this correct? If so, I suggest you follow this FAQ entry instead of "scrolling" your own solution:)

Matching exact log-levels

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>