【问题标题】:Load log4j.properties with JAR [duplicate]使用 JAR 加载 log4j.properties [重复]
【发布时间】:2012-10-05 13:28:35
【问题描述】:

我有一个包含以下清单的 jar 文件

Manifest-Version: 1.0  
Created-By: 1.7.0_07 (Oracle Corporation)  
Main-Class: test.Main  
Class-Path: ./log4j.properties lib/log4j-1.2.17.jar 

我按如下方式运行课程

java -jar test.jar

这是我的文件夹

lib
log4j.properties
test.jar

为什么我看不到 log4j 属性文件?这是我看到的

log4j:WARN No appenders could be found for logger (test.Main).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

谢谢

解决方案: 将清单中的类路径更改为此

Class-Path: . lib/log4j-1.2.17.jar 

【问题讨论】:

标签: java jar log4j


【解决方案1】:

你也可以用参数启动你的JVM:

-Dlog4j.configuration=file:"./your/properties/path/log4j.properties"

指定外部日志属性的任意位置。我在一个特定项目中经常使用它。

【讨论】:

  • log4j.configuration 用于 xml 配置
  • 好吧,我的朋友,它与属性文件配合得很好。试试看。
  • 使用的jar版本:log4j-1.2.14, slf4j-api-1.5.8, slf4j-log4j12-1.5.8
  • 对不起,我的错。它们对 xml 和属性配置都有单一属性。 logging.apache.org/log4j/1.2/…
【解决方案2】:

属性文件不在类路径中,您必须提供它并从代码中调用它,如 here 所示。

编辑: 使用您的目录结构,您可以这样称呼它:

PropertyConfigurator.configure("log4j.properties");

EDIT2:

另外,您必须为其提供附加程序:

log4j.rootLogger=DEBUG, Appender1
log4j.logger.[logger-name]=level, Appender1
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

如果您想更好地控制日志记录,请删除第一行(root looger)并将第二行放在最顶层包而不是 [logger-name] 的位置,以便该包中的所有类都可以使用日志记录。

您可以定义多个附加程序并以这种方式将它们分配给不同的类。

【讨论】:

    【解决方案3】:

    PropertyConfigurator.configure(ABC.class.getResourceAsStream("log4j.properties")) 工作正常,但基本上你需要将 Log4j 属性文件放在 Source Code 文件夹中(Java 类旁边)。

    或者你可以尝试放在外面并在getResourceAsStream("resources/log4j.properties")方法中给出正确的路径

    【讨论】:

    • 这解决了我的问题。 TNX 很多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2017-07-20
    • 2012-06-15
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多