Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TimeBasedRollingPolicy logback programmatically

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

like image 873
AFF Avatar asked Oct 15 '25 22:10

AFF


1 Answers

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

like image 128
AFF Avatar answered Oct 18 '25 10:10

AFF



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!