2017-03-31 5 views
1

私はプログラム構成のいくつかの例を見出しましたが、非同期ロギングについて言及していません。 log4j 2をすべてのロガーを非同期にするように設定するにはどうすればよいですか? わかりやすく:私はSystemプロパティを設定することでそれを作ることができません。私が必要なのは次のようなものです:How to configure log4j 2.x purely programmatically?log4j 2を非同期モードにプログラムで設定するには?

答えて

2

システムプロパティとlog4j2.component.propertiesファイルを使用できない場合。 ConfigurationFactory.setConfigurationFactoryメソッドを試すことができます。 CustomConfigurationFactory.java

@Plugin(name = "CustomConfigurationFactory", category = ConfigurationFactory.CATEGORY) 
@Order(50) 
public class CustomConfigurationFactory extends ConfigurationFactory { 

    private static Configuration createConfiguration(final String name, ConfigurationBuilder<BuiltConfiguration> builder) { 
    builder.setConfigurationName(name); 

    AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE"). 
     addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT); 
    appenderBuilder.add(builder.newLayout("PatternLayout"). 
     addAttribute("pattern", "%level: %msg%n")); 
    builder.add(appenderBuilder); 

    RootLoggerComponentBuilder rootLoggerBuilder = builder.newAsyncRootLogger(Level.DEBUG); // use newAsyncRootLogger instead of newRootLogger 
    rootLoggerBuilder.add(builder.newAppenderRef("Stdout")); 

    builder.add(rootLoggerBuilder); 
    return builder.build(); 
    } 

    @Override 
    public Configuration getConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) { 
    return getConfiguration(loggerContext, source.toString(), null); 
    } 

    @Override 
    public Configuration getConfiguration(final LoggerContext loggerContext, final String name, final URI configLocation) { 
    ConfigurationBuilder<BuiltConfiguration> builder = newConfigurationBuilder(); 
    return createConfiguration(name, builder); 
    } 

    @Override 
    protected String[] getSupportedTypes() { 
    return new String[]{"*"}; 
    } 
} 

が、これは:-)

を役に立てば幸い

Log4j2.java

public class Log4j2 { 

    static { 
    ConfigurationFactory.setConfigurationFactory(new CustomConfigurationFactory()); // This must be called before any other calls to Log4j 
    } 

    private static Logger logger = LogManager.getLogger(); 

    public static void main(String[] args) { 
    logger.info("hello"); 
    } 
} 

は、ここでは簡単な例です

関連する問題