[英]Add file logging dynamically at runtime with Log4j2 2.8.1
我需要以編程方式添加文件日志記錄,並動態生成文件名。
我的代碼是這樣的:
private static final Logger LOGGER = LogManager.getLogger(Archiver.class);
public static void openLogfile(String folder) {
String dateTime = "TODO";
String fileName = folder + "upload" + dateTime + ".log";
LOGGER.info("Opening " + fileName + " for logging.");
// setting up a FileAppender dynamically...
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
Layout layout = PatternLayout.createLayout(PatternLayout.SIMPLE_CONVERSION_PATTERN, null, config, null,
null, true, true, null, null);
Appender appender = FileAppender.createAppender(fileName, "false", "false", "File", "true",
"false", "false", "4000", layout, null, "false", null, config);
appender.start();
config.addAppender(appender);
AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
AppenderRef[] refs = new AppenderRef[]{ref};
LoggerConfig loggerConfig = LoggerConfig.createLogger(true, Level.DEBUG, "org.apache.logging.log4j", "", refs,
null, config, null);
loggerConfig.addAppender(appender, null, null);
config.addLogger("org.apache.logging.log4j", loggerConfig);
ctx.updateLoggers();
}
我看了一下如何在運行時以編程方式添加Log4J2追加器的配方? 並訪問http://logging.apache.org/log4j/2.x/manual/customconfig.html#AddingToCurrent 。
我的問題是:
有人可以提供一個帶有最新API的后代示例到log4j2來動態添加文件日志記錄嗎? 我使用org.apache.logging.log4j 2.8.1。
根據評論中的其他信息,這是我的建議。 我不認為您出於問題中提到的所有原因都需要以編程方式進行此操作。
相反,您可以使用以下示例來配置log4j2系統。 請注意,您不一定需要控制台附加程序,我只是將其用於測試。
log4j2.xml內容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="[%date{ISO8601}][%-5level][%t] %m%n" />
</Console>
<File
fileName="logs/${ctx:fileName}.txt"
name="logFile">
<PatternLayout>
<Pattern>[%date{ISO8601}][%-5level][%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Logger name="example" level="TRACE" additivity="false">
<AppenderRef ref="STDOUT" />
<AppenderRef ref="logFile" />
</Logger>
<Root level="WARN">
<AppenderRef ref="STDOUT" />
</Root>
</Loggers>
</Configuration>
Java代碼:
package example;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;
public class LogFileNameBasedOnArg0Main {
public static void main(String[] args) {
ThreadContext.put("fileName", args[0]);
Logger log = LogManager.getLogger();
log.info("Here's some info!");
}
}
輸出:
我使用了一個程序參數“ myFile”來生成文件:logs / myFile.txt,內容如下:
[2017-05-03T11:20:37,653][INFO ][main] Here's some info!
您應該能夠修改此示例以滿足您的需求,並且無需進行任何程序配置,從而避免了您提到的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.