2014-12-02 48 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

相關問題