【问题标题】:How to load external log4j logging config in Spring 5 and Tomcat 8 (Log4jConfigListener)如何在 Spring 5 和 Tomcat 8 (Log4jConfigListener) 中加载外部 log4j 日志配置
【发布时间】:2020-08-18 18:44:09
【问题描述】:

我有一个部署到 Tomcat 8.5.15 的 java spring 5 应用程序。 Java 应用程序包含 log4j 框架和(默认)配置文件“log4j.properties”。

在某些情况下,我想加载一个外部 log4j 文件,它会覆盖应用程序中打包的文件,这可能吗?

之前你可以使用 Spring 的“Log4jConfigListener”来做到这一点。

【问题讨论】:

    标签: spring tomcat logging log4j


    【解决方案1】:

    是的,您可以通过编写少量代码来使用它的外部配置设置。

    // import org.apache.logging.log4j.core.LoggerContext;
    
    LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
    File file = new File("path/to/a/different/log4j2.xml");
    
    // this will force a reconfiguration
    context.setConfigLocation(file.toURI());
    

    参考:Link

    如果您不想使用*.xml,则可以使用其他类型,例如JSONYAMLproperties...

    
     1. Log4j will inspect the "log4j.configurationFile" system property and, if set, will attempt to load the configuration using the ConfigurationFactory that matches the file extension. Note that this is not restricted to a location on the local file system and may contain a URL.
     2. If no system property is set the properties ConfigurationFactory will look for log4j2-test.properties in the classpath.
     3. If no such file is found the YAML ConfigurationFactory will look for log4j2-test.yaml or log4j2-test.yml in the classpath. 
     4. If no such file is found the JSON ConfigurationFactory will look for log4j2-test.json or log4j2-test.jsn in the classpath. 
     5. If no such file is found the XML ConfigurationFactory will look for log4j2-test.xml in the classpath. 
     6. If a test file cannot be located the properties ConfigurationFactory will look for log4j2.properties on the classpath. 
     7. If a properties file cannot be located the YAML ConfigurationFactory will look for log4j2.yaml or log4j2.yml on the classpath.
     8. If a YAML file cannot be located the JSON ConfigurationFactory will look for log4j2.json or log4j2.jsn on the classpath.
     9. If a JSON file cannot be located the XML ConfigurationFactory will try to locate log4j2.xml on the classpath.
     10. If no configuration file could be located the DefaultConfiguration will be used. This will cause logging output to go to the console.
    
    

    参考:Link

    【讨论】:

    • @Jojje 我没有尝试过,但 log4j 和 log4j2 几乎相同,所以我认为它会起作用。请访问reference site 并搜索“示例配置”并阅读您的条件。我希望它有效
    • 如果可以的话,从 log4j 迁移 log4j2 也是不错的选择。 reference link
    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2016-01-09
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多