I want to configure logback TimeBasedRollingPolicy programmatically but it does not create my log file in routed folder. here is my code which call the logger creator class:
CreateLogger LoggerClass=new CreateLogger();
private final Logger logger = loggerClass.createLoggerFor("foo", "D:\\logback/testLogback.log");
logger.debug("11111");
D:\logback/testLogback.log is the main log file. here is LoggerCreator class:
public class CreateLogger {
public Logger createLoggerFor(String string, String file) {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
PatternLayoutEncoder ple = new PatternLayoutEncoder();
ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
ple.setContext(lc);
ple.start();
FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
fileAppender.setFile(file);
fileAppender.setEncoder(ple);
fileAppender.setContext(lc);
fileAppender.start();
RollingFileAppender logFileAppender = new RollingFileAppender();
logFileAppender.setContext(lc);
logFileAppender.setName("debug");
logFileAppender.setEncoder(ple);
logFileAppender.setAppend(true);
logFileAppender.setFile(file);
TimeBasedRollingPolicy logFilePolicy = new TimeBasedRollingPolicy();
logFilePolicy.setContext(lc);
logFilePolicy.setParent(logFileAppender);
logFilePolicy.setFileNamePattern("D:\\logback/archived/testLogBack.%d{yyyy-MM-dd}.%i.log");
logFilePolicy.setMaxHistory(7);
logFilePolicy.start();
logFileAppender.setRollingPolicy(logFilePolicy);
logFileAppender.start();
Logger logger = (Logger) LoggerFactory.getLogger(string);
logger.addAppender(fileAppender);
logger.setLevel(Level.DEBUG);
logger.setAdditive(false);
logger.addAppender(logFileAppender);
return logger;
}
}
archived files should be in this path using mentioned pattern name: D:\logback/archived/testLogBack.%d{yyyy-MM-dd}.%i.log"
my problem is the created logs are added to main log file and not separated base on date.
I can also see these lines in console:
14:44:16,864 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@15:83 - no applicable action for [rollingPolicy], current ElementPath is [[configuration][appender][rollingPolicy]]
14:44:16,864 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@17:30 - no applicable action for [fileNamePattern], current ElementPath is [[configuration][appender][rollingPolicy][fileNamePattern]]
my application server is weblogic 12c
I solved it by myself as below:
PatternLayoutEncoder logEncoder = new PatternLayoutEncoder();
logEncoder.setContext(logCtx);
logEncoder.setPattern("%-12date{YYYY-MM-dd HH:mm:ss.SSS} %-5level - %msg%n");
logEncoder.start();
ConsoleAppender logConsoleAppender = new ConsoleAppender();
logConsoleAppender.setContext(logCtx);
logConsoleAppender.setName("console");
logConsoleAppender.setEncoder(logEncoder);
logConsoleAppender.start();
logEncoder = new PatternLayoutEncoder();
logEncoder.setContext(logCtx);
logEncoder.setPattern("%-12date{YYYY-MM-dd HH:mm:ss.SSS} %-5level - %msg%n");
logEncoder.start();
RollingFileAppender logFileAppender = new RollingFileAppender();
logFileAppender.setContext(logCtx);
logFileAppender.setName("logFile");
logFileAppender.setEncoder(logEncoder);
logFileAppender.setAppend(true);
logFileAppender.setFile("logs/logfile.log");
TimeBasedRollingPolicy logFilePolicy = new TimeBasedRollingPolicy();
logFilePolicy.setContext(logCtx);
logFilePolicy.setParent(logFileAppender);
logFilePolicy.setFileNamePattern("logs/archived/logfile-%d{yyyy-MM-dd_HH}.log.zip");
logFilePolicy.setMaxHistory(7);
logFilePolicy.start();
logFileAppender.setRollingPolicy(logFilePolicy);
logFileAppender.start();
Logger log = logCtx.getLogger("Main");
log.setAdditive(false);
log.setLevel(Level.INFO);
log.addAppender(logConsoleAppender);
log.addAppender(logFileAppender);
return log;
I also activated prefer-application-packages and prefer-application-resources in weblogic-application.xml.
Hope it would helps others