我已经把log4j放到了我的buildpath中,但是当我运行我的应用程序时,我得到了以下消息:

log4j:WARN No appenders could be found for logger (dao.hsqlmanager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

这些警告是什么意思?这里的阑尾是什么?


当前回答

考虑log4j JVM参数Dlog4j.configuration

一般来说:

添加指向log4j配置文件的JVM参数。 语法如下:

java [ options ] -jar file.jar [ arguments ]

一个真实的命令行示例如下所示:

java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2

对于IntelliJ IDE用户:

1.Run/Debug Configurations
2.Edit configurations...
3.VM options
4.Enter the same value also starting with "-D"

小贴士:

1.Eclipse IDE用户将找到等效的方法

2.对于运行/调试配置编辑器,很可能在开始时,您的特定可执行文件不存在。根据您当前正在处理的项目的大小,在目录中找到它可能会令人不快。如果在继续运行/调试配置之前只运行/执行一次文件(单击play),无论执行结果是什么,都不会太麻烦。

3.请注意您的工作目录、相对路径和类路径。

其他回答

确保属性文件已正确设置。 同样,似乎编译器无法找到属性文件,您可以在pom中设置如下(仅当您使用maven project时)。

<build>
       <sourceDirectory> src/main/java</sourceDirectory>
       <testSourceDirectory> src/test/java</testSourceDirectory>
        <resources>
             <resource>
                  <directory>resources</directory>
             </resource>
        </resources>           
</build >

这个网站上的解决方案为我工作https://crunchify.com/java-how-to-configure-log4j-logger-property-correctly/。现在我在log4j中没有看到任何警告

我把它放在log4j中。我把它放在src/main/resources中

# This sets the global logging level and specifies the appenders
log4j.rootLogger=INFO, theConsoleAppender

# settings for the console appender
log4j.appender.theConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.theConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.theConsoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

快速的解决方案:

为main函数添加代码: String log4jConfPath = "/path/to/log4j.properties"; PropertyConfigurator.configure (log4jConfPath); 创建一个名为log4j的文件。/path/to的属性 log4j。rootLogger = INFO, 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{yy/MM/dd HH: MM:ss} %p %c{2}: %m%n

如前所述,有两种方法

首先是将这一行添加到你的main方法中:

BasicConfigurator.configure();

第二种方法是添加这个标准log4j。属性文件到你的类路径:

在采用第二种方法时,你需要确保正确地初始化了文件, 如。

Properties props = new Properties();
props.load(new FileInputStream("log4j property file path"));
props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

确保创建了存储日志文件所需的文件夹。

我在尝试用intellij 12中的maven构建可执行jar时遇到了这个问题。结果是,因为java清单文件不包括类路径,所以无法在根级别(jar文件从那里执行)找到log4j属性文件。

供参考,我是这样得到记录器的:

Logger log = LogManager.getLogger(MyClassIWantedToLogFrom.class);

我能够让它工作与一个pom文件,其中包括:

         <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath> 
                        <mainClass>com.mycompany.mainPackage.mainClass</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>.</Class-Path> <!-- need to add current directory to classpath properties files can be found -->
                    </manifestEntries>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>