【问题标题】:How can I override the log4j properties file in my jar at runtime [duplicate]如何在运行时覆盖我的 jar 中的 log4j 属性文件 [重复]
【发布时间】:2013-01-09 18:26:19
【问题描述】:

可能重复:
Dynamically Changing log4j log level

我有一个 jar 文件,其中包含一个 log4j 属性文件。我尝试使用

-Dlog4j.configuration=file:[filename]

runtime 使用更改属性文件 java,它没有工作。我需要在 sh 文件中执行此操作 谁能告诉我怎么做?我也尝试添加

-Dlog4j.defaultInitOverride=true

【问题讨论】:

  • 不,我需要使用 sh 文件和 VM 参数来执行此操作。似乎有办法做到这一点,我就是无法让它工作
  • 实际上,它不是“运行时”,而是“启动时”。你试过没有file:前缀的路径吗?你确定文件存在吗?根据doc,您的步骤是有效的..

标签: java unix jar log4j


【解决方案1】:

可以在运行时覆盖 log4j 属性文件。如果你不能,你可能会陷入这种情况:

  1. 在您的 jar 或代码中的某处,log4j 系统是手动初始化的,例如

     URL url=loader.getResource(LOGGER_CONFIG_FILE)
     DOMConfigurator.configure(url);
    

【讨论】:

  • 这有帮助!我不得不使用默认的 Java 类加载器而不是 log4j 加载器的想法。后者由于某种原因不起作用。
【解决方案2】:

这里有一个很好的分步教程(带有很好的屏幕截图!),它展示了在运行时更改 log4j 设置的几种不同选择:

【讨论】:

  • 不错的教程。但是,它似乎特定于 webapps——如果我错了,请纠正我。我认为 OP 希望从 shell 脚本启动他们的应用程序。
  • 我一直在独立的 Java Swing 和控制台模式应用程序中使用 log4j。完全相同的原则适用:只需编辑适当的 log4j.properties 文件 :)
  • 好老摇摆。 :-) 所以,你说的是“只是”从 jar 中提取适当的 log4j.properties 文件,然后重建 jar,或者运行分解的 jar?这比在脚本中设置属性要多得多的工作和混乱。
猜你喜欢
  • 2017-10-14
  • 1970-01-01
  • 2016-01-16
  • 2018-01-24
  • 2013-09-07
  • 2014-10-28
  • 2016-11-13
  • 1970-01-01
  • 2012-02-08
相关资源
最近更新 更多