【问题标题】:External log4j2 configuration file外部 log4j2 配置文件
【发布时间】:2018-05-06 01:02:16
【问题描述】:

我有一个使用 log4j2 作为日志系统的 Spring Web 应用程序。 日志4j2:2.6.2 slf4j:1.7.21

我在生产中使用的类路径中有一个 log4j2.xml。

我想使用不同的配置文件进行开发,尤其是当我从 Eclipse 运行服务器时。

我尝试将 -Dlog4j.configurationFile=C:\Dev\log4j2.xml 添加到 eclipse 中的默认 VM 参数以及服务器参数中,但到目前为止没有运气,它总是从类路径中获取 log4j2.xml

有什么想法吗?

谢谢

【问题讨论】:

    标签: java spring log4j2


    【解决方案1】:

    尝试在文件前添加file: 前缀。 -Dlog4j.configurationFile=file:///C:/Dev/log4j2.xml

    如果您使用的是弹簧属性文件,您也可以这样做:

    logging.config = file:///C:/Dev/log4j2.xml
    

    【讨论】:

    • 不走运,我去了运行配置、Tomcat > 参数和 VM 参数文本框。我添加了“ -Dlog4j.configurationFile=file:C:\Dev\log4j2.xml 它仍在从类路径中获取 log4j2.xml
    • 我稍微修正了路径。但我怀疑这会有所作为。您可以通过检查 System.getProperty("log4j.configurationFile") 来验证属性是否到达您的应用程序。
    • 我尝试了不同的方法,但它总是选择 WEB-INF/中的文件
    【解决方案2】:

    你可以通过两种方式来做这些事情。

    1. Application.properties
    2. 运行配置下的 VM 参数。

    案例 1:应用程序属性

    (Mac 操作系统) logging.config=file:/Users/XXX/XXX/XXX/log4j2.xml

    (Windows 操作系统) logging.config=file:/XXX/XXX/XXX/log4j2.xml

    案例 2:项目运行配置

    -Dlogging.config=/Users/XXX/XXXX/log4j2.xml

    希望这有助于解决您的问题。

    干杯!!!

    【讨论】:

    • 为什么你的 Mac 版本根植于“用户”,为什么你的 windows 版本使用 Linux 风格的路径?
    • 仅供参考。它是系统中文件的绝对路径。就这样。对于 Windows,通常以 C:/ 或 D:/ 等开头,
    【解决方案3】:

    我们需要配置外部日志文件,如果不存在则使用WEB-INF中的默认配置文件。

    这是我们项目中的代码,如果存在,我使用加载外部配置日志文件,如果不加载则在 WEB-INF 中加载默认值:

    public class Log4jLoader extends Log4jServletContextListener {
    
      private String LOG_FROM_CLASSPATH = "WEB-INF/log4j2.xml";
    
      @Override
      public void contextInitialized(ServletContextEvent event) {
        File f = new File(getLog4jPath());
        String path = f.exists() ? f.getAbsolutePath() : getFilefromClassPath(event);
        Configurator.initialize(null, path);
        LoggerFactory.getLogger(Log4jLoader.class)
            .info("load log4j2 from: {}", path);
      }
      private String getLog4jPath(){
           return "logFilePath";
      }
    }
    

    【讨论】:

      【解决方案4】:

      我尝试了以下方法,它对我有用;

      StringfullyQualifiedFilePath = "/mnt/test/log4j2local.properties"; Configurator.initialize(null,fullyQualifiedFilePath);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-18
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        • 2014-12-30
        相关资源
        最近更新 更多