Java应用程序:让Log4j在Eclipse环境中工作

Java应用程序:让Log4j在Eclipse环境中工作,java,eclipse,log4j,slf4j,Java,Eclipse,Log4j,Slf4j,我已经尽力将Eclipse和Java应用程序设置为使用log4j.properties文件。但是,它似乎没有使用属性文件,我不知道为什么 库:slf4j-api-1.6.1、slf4j-jdk14-1.6.1 在应用程序中,日志记录工作正常。我能够将信息、警告和错误打印到Eclipse控制台中 我希望能够将日志级别更改为调试,并将所有日志消息打印到控制台和日志文件 我创建了一个log4j.properties文件,如下所示: log4j.rootLogger=DEBUG,console,file

我已经尽力将Eclipse和Java应用程序设置为使用
log4j.properties
文件。但是,它似乎没有使用属性文件,我不知道为什么

库:slf4j-api-1.6.1、slf4j-jdk14-1.6.1

在应用程序中,日志记录工作正常。我能够将信息、警告和错误打印到Eclipse控制台中

我希望能够将日志级别更改为调试,并将所有日志消息打印到控制台和日志文件

我创建了一个
log4j.properties
文件,如下所示:

log4j.rootLogger=DEBUG,console,file
log4j.rootCategory=DEBUG, R, O

# Stdout
log4j.appender.O=org.apache.log4j.ConsoleAppender

# File
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log4j.log

# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB

# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=5
log4j.appender.file.File=checkLog.log
log4j.appender.file.threshold=DEBUG

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.O.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
My Project
--src/
----MYProject/
------*.java
--bin/
----MYProject/
------*.class
--log4j/
----log4j.properties
我的目录结构如下所示:

log4j.rootLogger=DEBUG,console,file
log4j.rootCategory=DEBUG, R, O

# Stdout
log4j.appender.O=org.apache.log4j.ConsoleAppender

# File
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log4j.log

# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB

# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=5
log4j.appender.file.File=checkLog.log
log4j.appender.file.threshold=DEBUG

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.O.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
My Project
--src/
----MYProject/
------*.java
--bin/
----MYProject/
------*.class
--log4j/
----log4j.properties
在Eclipse I中:

运行Configurations->Classpath(tab)->,右键单击用户条目->将“log4j”添加为新文件夹,并保存

然后在我的代码中,我像这样调用记录器(示例代码演示了我的方法,因此它可能有语法错误):

然后我调用
someMethod
,它将
INFO
WARN
ERROR
打印到Eclipse控制台。它不会打印
DEBUG
,也不会打印到文件


如果您能就我可能做错的地方提出建议,我将不胜感激。

您需要告诉您的代码使用属性文件。在完成任何日志记录之前,请将

PropertyConfigurator.configure("log4j/log4j.properties");

log4j.properties
前面的类路径中可能有另一个
log4j.properties
log4j.xml
文件。打开项目的运行配置,并添加
-Dlog4j.debug=true
作为项目的VM参数。这将指示log4j在控制台上打印大量附加信息,包括它正在使用的配置文件。

如果您使用的是日志façadeslf4j,那么您需要通过为该后端包含相应的jar文件来指定一个日志后端。在您的示例中,您已经在类路径上安装了
slf4j-jdk14-x.x.x.jar
,它只是一个通用记录器后端

要使用log4j后端,您需要删除
slf4j-jdk14-x.x.x.jar
,并将其替换为
slf4j-log4j12-x.x.jar
。如果您不删除它,slf4j必须只选择一个后端jar,而可能不是您想要的那个

当然,在类路径上也需要实际的
log4j-x.x.x.jar
文件


一旦这些JAR正确就位,那么
-Dlog4j.debug
的VM参数将实际工作,并且在调试日志配置的来源时非常有用。

您的目标目录中可能有一个旧版本。 清理项目并重试


除此之外,如果没有通过eclipse添加log4j.properties,您应该确保刷新eclipse项目。

在路径项目属性/库选项卡中删除项目的jre(jre系统库),然后再次设置jre

我已经玩弄了你的评论和apines,这就是我发现的。我无法在当前设置中添加PropertyConfiguration,因为它是log4j库的属性,而不是slf4j-jdk14(据我所知,slf4j的log4j活页夹)库的一部分。将VM参数设置为true不会返回任何额外的调试。如果我随后引用了slf4j-jdk14之外的实际log4j库,我将开始获得调试输出。只需添加引用即可使log4j.properties文件开始工作。这似乎能满足我90%的需求。这会增加调试,但在初始post中我在给定类中打印的命令不再打印(test_logger.debug、test_logger.info等)。我想这是因为我添加的log4j库正在覆盖我以前使用的org.slf4j.Logger。对于如何让这两个库更好地协同工作,我有点困惑,有什么建议吗?slf4j只是日志记录的一个门面,您仍然需要将实际的日志记录库(在您的例子中是log4j)添加到类路径中。请参阅此链接:请您详细说明您的答案,并添加有关您提供的解决方案的更多描述,好吗?