[英]Initiate Log4j2 RollingFileAppender in Java
我正在使用 log4j2。
我想創建一個 RollingFileAppender,它每天輪換日志文件。 在應用程序啟動之前,日志文件的名稱是未知的(日志文件名稱是從應用程序配置中組裝的)。
這就是為什么我需要在運行時添加一個 RollingFileAppender。
我有以下代碼:
public static final ConfigurationBuilder<BuiltConfiguration> BUILDER = ConfigurationBuilderFactory.newConfigurationBuilder
public void initFileLoggerWithFilePattern(final String pattern) {
final LoggerComponentBuilder logger = BUILDER.newLogger("FileLogger", Level.DEBUG);
final AppenderComponentBuilder appender = createFileAppenderWithFilePattern(pattern);
BUILDER.add(appender);
logger.add(BUILDER.newAppenderRef("RollingFileAppender"));
BUILDER.add(logger);
Configurator.initialize(BUILDER.build());
}
public AppenderComponentBuilder createFileAppenderWithFilePattern(final String pattern) {
final AppenderComponentBuilder acb = BUILDER.newAppender("RollingFileAppender", "RollingFile");
acb.addAttribute("fileName", pattern);
acb.addAttribute("filePattern", pattern);
acb.addComponent(createPatternLayout());
acb.addComponent(createTimeBasedTriggeringPolicy());
return acb;
}
public LayoutComponentBuilder createPatternLayout() {
final LayoutComponentBuilder lcb = BUILDER.newLayout("PatternLayout");
lcb.addAttribute("pattern", "%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT}Z %m");
return lcb;
}
public ComponentBuilder createTimeBasedTriggeringPolicy() {
final ComponentBuilder policies = BUILDER.newComponent("Policies");
final ComponentBuilder policy = BUILDER.newComponent("TimeBasedTriggeringPolicy");
policies.addComponent(policy);
return policies;
}
問題是這段代碼完全沒有改變。 沒有附加程序和記錄器被添加到配置中。 以編程方式創建的“FileLogger”不可用。
執行上述代碼后,我使用此代碼打印記錄器和附加程序。
private void printLog4jConfig() {
final LoggerContext context = (LoggerContext) LogManager.getContext(false);
final Configuration config = context.getConfiguration();
// Print appenders
for(Appender app : config.getAppenders().values()) {
System.out.println(app.getName());
}
// Print Loggers and their Appenders
for(LoggerConfig lc : config.getLoggers().values()) {
System.out.println(lc);
for(Appender app : lc.getAppenders().values()) {
System.out.println(" " + app);
}
}
}
Output:
Appenders
-------------
STDOUT
Loggers
-------------
root
STDOUT
Console
STDOUT
我的問題:
我的代碼有什么問題? 為什么我的 Appender 和我的 Logger 沒有添加? 分別為什么沒有刷新/更新配置?
如何在運行時將 RollingFileAppender 和記錄器添加到 log4j2 配置中?
我找到了解決我的問題的方法。
而是使用
Configurator.initialize(BUILDER.build())
我不得不使用
Configurator.reconfigure(BUILDER.build());
這重新加載了配置,我能夠看到並使用我的 appender 和 logger。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.