0

My log4j.properties contains this 2 appender:

log4j.appender.TEST_SYNC=org.apache.log4j.DailyRollingFileAppender
log4j.appender.TEST_SYNC.DatePattern=.yyyy-MM-dd-HH
log4j.appender.TEST_SYNC.File=test.log
log4j.appender.TEST_SYNC.encoding=UTF-8
log4j.appender.TEST_SYNC.layout=org.apache.log4j.PatternLayout
log4j.appender.TEST=org.com.log.AsyncAppenderHelper
log4j.appender.TEST.appenderFromLogger=TEST_SYNC

I expected that log4j will first register TEST_SYNC and then TEST which using TEST_SYNC appender. When it register vice versa then logging doesnt work. With debug I figure out that log4j use java.util.Properties where order is not guarantee so sometimes my logging doesnt work. How I can guarantee order of registering appenders ?

/*
 * This class helps configure to AsyncAppender from log4j as part of log4j.properties
 * You can inject other appenders to AsyncAppender using the AsyncAppenderHelper
 * This would free up the main program thread to be independent of log4j's logging operation
 * @Author http://www.linkedin.com/in/jobypgeorge
 */

public class AsyncAppenderHelper extends AsyncAppender {

    public AsyncAppenderHelper() {
        super();
    }

    public void setAppenderFromLogger(String name) {
        Logger l = Logger.getLogger(name);

        Enumeration<Appender> appenders = l.getAllAppenders();

        while (appenders.hasMoreElements()) {
            Appender appender = appenders.nextElement();
            this.addAppender(appender);
            LogLog.debug("Attaching appender named [" + name + "] to appender named [" + appender.getName() + "].");
        }
    }
}
hudi
  • 15,555
  • 47
  • 142
  • 246

1 Answers1

0

You might switch to log4j.xml. (this might be helpful: log4j.properties vs log4j.xml)

Community
  • 1
  • 1
Thomas
  • 87,414
  • 12
  • 119
  • 157
  • I cant. I have to use log4j.properties – hudi May 15 '14 at 10:13
  • @hudi then the only option might be to patch Log4j and replace `Properties` with a `LinkedHashMap`. There might be a patch already and if not you could file a bug report/feature request. – Thomas May 15 '14 at 15:50