我有一个非常简单的应用程序,它说明了日志记录的功能。我用log4j。但我的设置有些问题。我下载了文件 log4j-1.2.16.jar 。并通过属性 - >将其连接到我的项目Java构建路径 - >图书馆 - >添加外部JAR ...... 。这是我的班级:
package ru.log4j.log4jhelloworld;
import org.apache.log4j.Logger;
public class MyClass {
private static final Logger logger = Logger.getLogger(MyClass.class);
public static void main(String[] args) {
logger.info("Hello World!");
}
}
我的 log4j.xml :
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="aa %p %c: %m%n"/>
</layout>
</appender>
<!--Root logger-->
<root>
<priority value ="debug" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
我的 log4j.properties :
log4j.rootCategory=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern= %p %c: %m%n
在控制台中显示以下异常:
log4j:WARN No appenders could be found for logger (ru.log4j.log4jhelloworld.MyClass).
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.xml 和 log4j.properties 。并确定他们是否需要?他们应该在哪个目录中找到?我还应该注册什么?这是我的项目结构
screen http://s017.radikal.ru/i433/1202/81/b2739aedc39d.jpg。
我猜这个错误。我的问题是什么?请帮帮我!
答案 0 :(得分:9)
要解决您的问题,请将您的log4j配置文件(即log4j.xml
或log4j.properties
)放在src
文件夹中,它应该可以正常工作。
此外,您不需要这两个文件(log4j.xml
和log4j.properties
),只需使用其中一个。
答案 1 :(得分:5)
问题是记录器系统找不到您的配置文件。要修复它,您有几个选择:
如果您需要将记录器配置保留在打包类之外(通常在实际生产系统中进行),那么
/etc/my_great_app/log4j.xml
)
-Dlog4j.configuration=<path log4j config>
例如
-Dlog4j.configuration=file:///etc/my_great_app/log4j.xml
请注意,路径必须包含前缀file://
。 如果您希望将log4j配置与代码一起保留(这是单元测试的典型配置),那么您需要做的就是 - 只需确保log4配置位置是类路径的一部分。例如,如果您正在使用maven,只需将log4j.properties
存储在src/main/resources
目录
关于log4j.properties
与log4j.xml
之间的差异。它们只是为log4j logger定义相同配置的两种不同方式。您不需要这两个文件,只需确定您更喜欢的格式并使用它:)
答案 2 :(得分:1)
使用-Dlog4j.debug VM参数运行应用程序,系统将提示您log4j想要的位置。
答案 3 :(得分:1)
log4j.properties文件放在src文件夹文件中,如下文
com.org.slk.LogExample.java
com.org.slk.log4j.properties
然后在LogExample.java中设置PropertyConfigurator
PropertyConfigurator.configure(LogExample.class.getResourceAsStream("log4j.properties"));
和属性文件集配置如bellow log4j.properties
# Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
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
# Redirect log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File= fullpath /myLog.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
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
答案 4 :(得分:0)
我遇到了类似的问题。并通过在Run AS中添加以下行来解决它 - &gt;运行配置 - &gt;参数选项卡
-Dcvp.property.path=/home/local/Project/property/
- &gt;您的属性文件的位置
谢谢!
答案 5 :(得分:0)
您可以将log4j.properties文件保留在项目中的任何位置。 然后加载您的文件
private static Logger logger = null;
static { System.setProperty(“log4j.configurationFile”,“C:\ Users \ jhaas \ Workspace_3.0.30 \ RestClient \ conf \ log4j.properties”); }
类似于在eclipse中设置VM参数,如
-Dlog4j.configurationFile = C:\ Users \用户jhaas \ Workspace_3.0.30 \ RESTClient实现\ SRC \主\资源\ log4j.properties
更好的方法是将它放在代码中,而不是设置为eclipse VM参数。
答案 6 :(得分:0)
以上都不适合我。我的代码就是找不到 log4j.properties。这是我的代码:
public class LoggingSadness {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(LoggingSadness.class);
logger.trace("Pssst! I'm down here!");
logger.debug("Squash, squash");
logger.info("Hey, yo!");
logger.warn("Uh, we might have a problem here...");
logger.error("Oh, rats in a bucket, screaming for cheese!");
}
}
还有我的 log4j.properties 文件:
# Root logger option
log4j.rootLogger=INFO, stdout
# 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=WILSON: %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%nConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n
看来我正在使用 log4j-1.2.17.jar。
我把log4j.properties文件放在src/main/resources/下,没找到。
我在VM选项里加了-Dlog4j.configuration=file:////log4j.properties,还是没有找到。
我尝试了上面提到的
PropertyConfigurator.configure(LogExample.class.getResourceAsStream("log4j.properties"));
但这甚至无法编译:'configure' 不需要流。
更新:结果是“logback”在路径中,并且正在接管。因此,我必须将 logback.xml 文件添加到被忽略的 log4j.properties 所在的同一位置,这样就成功了。