2014-12-02 62 views
0

我知道这个问题之前已被问过,但我找不到一个干净的解决方案。一切工作正常,直到我决定修改pom.xmlMaven log4j - 没有找到记录器的appender

这就是我所做的。

我修改了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)?
+0

这似乎是重复http://stackoverflow.com/questions/12532339/no-appenders-could-be-found-for-loggerlog4j – 2014-12-02 13:02:08

+0

是的问题是相同的,但解决方案不是。当我使用BasicConfigurator.configure()时,它只记录到终端,而不是文件。我想记录文件和终端。如果你仔细阅读我的问题,我不想使用PropertyConfigurator。有其他解决方法吗? – nuttynibbles 2014-12-02 13:04:56

回答

2

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

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

+0

我相信你打算在终端中运行时使用它? 'java -jar -Dlog4j.configuration = log4j.properties RootProjDir.jar'它不起作用 – nuttynibbles 2014-12-02 13:39:04

+0

你应该使用文件的绝对路径。例如,'-Dlog4j.configuration = file:// C:/ log4j.properties'。如果您不能使用绝对路径,则该配置文件必须位于classpath中。 – 2014-12-02 14:18:41

+0

绝对路径也没有工作。嗯 – nuttynibbles 2014-12-02 14:30:01

相关问题