2013-02-19 63 views
0

這個問題似乎與Using Logback but Log4j started displaying WARN no Appenders有關,但答案似乎並沒有解決這個問題。與SLF4J參考空maven項目有log4j「沒有appender可以發現」警告

當我創建一個比SLF4J其他不依賴Maven項目,我得到一個警告:

log4j:WARN No appenders could be found for logger (com.example.App). 
log4j:WARN Please initialize the log4j system properly. 

步驟:

在一個空目錄,執行

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart 

Define value for property 'groupId': : com.example 
Define value for property 'artifactId': : slf4jtest 
Define value for property 'version': 1.0-SNAPSHOT: : 
Define value for property 'package': com.example: : 

添加SLF4J到pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.example</groupId> 
    <artifactId>slf4jtest</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>slf4jtest</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.2</version> 
     </dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <version>1.7.2</version> 
</dependency> 
    </dependencies> 
</project> 

調用記錄在App.java

package com.example; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

/** 
* Hello world! 
* 
*/ 
public class App 
{ 
    public static void main(String[] args) 
    { 
     Logger logger = LoggerFactory.getLogger(App.class); 
     logger.debug("hello"); 
     System.out.println("Hello World!"); 
    } 
} 

執行:

mvn package 

執行:

mvn exec:java -Dexec.mainClass="com.example.App" 

輸出:

log4j:WARN No appenders could be found for logger (com.example.App). 
log4j:WARN Please initialize the log4j system properly. 
Hello World! 

log4j的未列出作爲依賴:

$ mvn dependency:tree 
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building slf4jtest 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ slf4jtest --- 
[INFO] com.example:slf4jtest:jar:1.0-SNAPSHOT 
[INFO] +- junit:junit:jar:3.8.1:test 
[INFO] \- org.slf4j:slf4j-api:jar:1.7.2:compile 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1.872s 
[INFO] Finished at: Tue Feb 19 11:23:33 EST 2013 
[INFO] Final Memory: 5M/81M 
[INFO] ------------------------------------------------------------------------ 

回答

1

所以我沒有意識到的Mac OS X預先包裝在/ Library/Java/Extensions下的log4j和slf4j ...我通過運行這個命令發現了這個:

java -verbose:class -cp ~/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar:~/.m2/repository/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2.jar:./target/classes com/example/App 

...發現(其中許多人)這些類被加載和使用,而不是我通過maven包括的那些。

/Library/Java/Extensions/log4j-1.2.15.jar 
/Library/Java/Extensions/slf4j-log4j12-1.5.8.jar 
/Library/Java/Extensions/slf4j-api-1.5.8.jar 

不知道「正確的」解決這個問題是什麼,但刪除所有來自該目錄的那些文件似乎這樣的伎倆。

+0

非常有趣。 [「Java開發指南for Mac」](http://developer.apple.com/library/mac/#documentation/Java/Conceptual/Java14Development/01-JavaOverview/JavaOverview.html#//apple_ref/doc/uid/ TP40001883-SW1)似乎暗示該目錄供用戶添加庫。你確定你或其他人沒有把那些東西放在那裏,甚至是偶然的?對於OS X來說,默認情況下,這似乎完全是瘋狂的。 – 2013-02-20 23:45:31

+0

@RyanStewart,它看起來很瘋狂......我不記得在這些庫中加入。我是電腦的唯一用戶。也許他們與其他應用程序一起安裝,儘管這似乎是非常糟糕的形式。 – studds 2013-02-22 02:57:21

+0

Google'd並找到http://www.geniuswiki.com/page#%2FGeniusWiki%2Bdocument%2FInstall%2Band%2Bupgrade,它說它包含在OSX中,但也包含http://issues.gradle.org/browse/GRADLE -1451表示他們帶着我過去安裝的AUSKey--所以不是100%肯定的。 – studds 2013-02-22 03:02:37

0

不能重複。我得到預期的SLF4J綁定失敗:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Hello World! 

我的依賴關係樹看起來和你的一樣:

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ slf4jtest --- 
[INFO] com.example:slf4jtest:jar:1.0-SNAPSHOT 
[INFO] +- junit:junit:jar:3.8.1:test 
[INFO] \- org.slf4j:slf4j-api:jar:1.7.2:compile 
[INFO] ------------------------------------------------------------------------ 

系統信息:

$ mvn -version 
Apache Maven 3.0.4 (r1232337; 2012-01-17 02:44:56-0600) 
Maven home: d:\dev\tools\maven 
Java version: 1.7.0_03, vendor: Oracle Corporation 
Java home: d:\dev\tools\java\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows" 
+0

謝謝...我在一個mac ..不知道這是它的一部分 – studds 2013-02-20 06:20:48

相關問題