Logback-以编程方式设置日志文件名

我正在使用logback,并且尝试在Java程序中以编程方式设置日志文件名(类似于以编程方式设置LogbackAppender路径),并且我尝试按以下方法调整该解决方案:

在logback-test.xml中:

<appender name="FILE" class="ch.qos.logback.core.FileAppender">

<file>log/${log_file_name}.log</file>

...

然后再次在我的Java程序中:

String logFileName = "" + System.currentTimeMillis(); // just for example

System.setProperty("log_file_name", logFileName);

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();

ContextInitializer ci = new ContextInitializer(lc);

lc.reset();

try

{

// I prefer autoConfig() over JoranConfigurator.doConfigure() so I

// wouldn't need to find the file myself.

ci.autoConfig();

}

catch (JoranException e)

{

// StatusPrinter will try to log this

e.printStackTrace();

}

StatusPrinter.printInCaseOfErrorsOrWarnings(lc);

但是结果是两个日志,一个完整并按我的意愿命名,例如“ 1319041145343.log”,另一个为空并命名为“

log_file_name_IS_UNDEFINED.log”。如何停止其他空日志文件的创建?

回答:

我相信以下内容将更接近您想要的内容。

import ch.qos.logback.classic.Logger;

import ch.qos.logback.classic.encoder.PatternLayoutEncoder;

import ch.qos.logback.core.FileAppender;

import ch.qos.logback.core.util.StatusPrinter;

import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;

public class Main {

public static void main(String[] args) {

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();

FileAppender fileAppender = new FileAppender();

fileAppender.setContext(loggerContext);

fileAppender.setName("timestamp");

// set the file name

fileAppender.setFile("log/" + System.currentTimeMillis()+".log");

PatternLayoutEncoder encoder = new PatternLayoutEncoder();

encoder.setContext(loggerContext);

encoder.setPattern("%r %thread %level - %msg%n");

encoder.start();

fileAppender.setEncoder(encoder);

fileAppender.start();

// attach the rolling file appender to the logger of your choice

Logger logbackLogger = loggerContext.getLogger("Main");

logbackLogger.addAppender(fileAppender);

// OPTIONAL: print logback internal status messages

StatusPrinter.print(loggerContext);

// log something

logbackLogger.debug("hello");

}

}

如果只需要添加日志文件名的时间戳,则logback已经支持timestamp元素。因此,您实际上根本不需要任何自定义代码。

以上是 Logback-以编程方式设置日志文件名 的全部内容, 来源链接: utcz.com/qa/402731.html

回到顶部