【问题标题】:Maven log4j - No appenders could be found for loggerMaven log4j - 找不到记录器的附加程序
【发布时间】:2014-12-02 12:54:26
【问题描述】:

我知道以前有人问过这个问题,但我找不到适合我的干净解决方案。一切正常,直到我决定修改 pom.xml

这就是我所做的。

我修改了 pom.xml 中资源文件的目标目录。当我将项目构建成 jar 文件时,我希望资源文件与 jar (ie: RootProjDir/target) 位于同一目录中,而不是在 RootProjDir/target/classes

<resources>
      <resource>
          <directory>src/main/resources</directory>
          <includes>
              <include>directories.properties</include>
              <include>webconfig.properties</include>
              <include>log4j.properties</include>
          </includes>
          <targetPath>${project.build.directory}</targetPath>
      </resource>
  </resources>

这是我的 log4j.properties 内容。我想登录日志文件并在终端打印出来:

# output log to console and logfile 
log4j.rootLogger=DEBUG, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/Users/nuttynibbles/Documents/workspace/javaWorkspace/RootProjDir/rootproj.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

当我执行 jar 文件时,我收到以下错误:

java -jar RootProjDir.jar 
log4j:WARN No appenders could be found for logger (org.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.

我在网上找到了一个解决方案,但是在 main() 中设置 log4j.properties 文件目录似乎不是一个干净的解决方案:

public static void main(String[] args) {
// This will tell log4j to read the log4j.properties in RootProDir/target
PropertyConfigurator.configure(System.getProperty("user.dir") + "/log4j.properties"); 

}

我该怎么办?

参考资料:

  1. Maven: how to place resource file together with jar?
  2. No appenders could be found for logger(log4j)?

【问题讨论】:

  • 是的,问题是一样的,但解决方案不是。当我使用 BasicConfigurator.configure() 时,它只记录到终端,而不是文件。我想记录文件和终端。如果您仔细阅读我的问题,我不想使用 PropertyConfigurator。还有其他方法可以解决吗?

标签: java maven log4j


【解决方案1】:

您可以定义系统属性-Dlog4j.configuration 并设置配置文件的路径。也可以使用-Dlog4j.debug进行调试。

例如(注意你应该使用绝对路径): -Dlog4j.configuration=file:///C:/log4j.properties.

【讨论】:

  • 我相信你的意思是在终端中运行它时以这种方式使用它? java -jar -Dlog4j.configuration=log4j.properties RootProjDir.jar 也没用
  • 您应该使用文件的绝对路径。例如,-Dlog4j.configuration=file://C:/log4j.properties。如果不能使用绝对路径,则该配置文件必须在类路径中。
  • 忘记了路径中的一个斜杠。检查更新的答案。也可以试试调试模式看看发生了什么。
  • 使用绝对路径是废话。相对路径的解决方案是什么?
猜你喜欢
  • 2015-10-17
  • 2012-09-13
  • 1970-01-01
  • 2015-07-23
  • 2015-06-11
  • 1970-01-01
  • 2018-03-21
相关资源
最近更新 更多