2013-02-19 58 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

相关问题