log4j-打印到控制台,但不打印到文件

log4j-打印到控制台,但不打印到文件,log4j,Log4j,我正在使用这个log4j.properties文件: log4j.rootLogger=ALL,console log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern = %d %p %t %c - %m%n lo

我正在使用这个log4j.properties文件:

log4j.rootLogger=ALL,console

log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d %p %t %c - %m%n

log4j.appender.A=org.apache.log4j.RollingFileAppender 
log4j.appender.A.File=log/LotteryLogger.log 
log4j.appender.A.MaxFileSize=2MB
log4j.appender.A.MaxBackupIndex=3
log4j.appender.A.layout = org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d %p %t %c - %m%n
log4j.category.com.test.controller=INFO,A
在我的TestController中,我有

private Logger logger = Logger.getLogger(TestController.class);
为什么不能打印到文件

顺便说一句,这是一个网络应用
当我在简单的独立应用程序上尝试此功能时,效果非常好。

如果您说它在IDE中运行良好,并且不能作为Web应用程序使用,则可能是您将log4j.properties文件放在了错误的位置

从命令行运行应用程序时,可能会向其传递JVM参数: log4j.configuration=/path/to/my/file/log4j.properties

在webapp的上下文中,servlet容器将负责加载log4j配置。 这通常是通过加载位于WEB-INF/classes下的log4j.properties/xml文件来完成的

另一种选择是将其添加到CATALINA_OPS环境变量中,您可以查看更多详细信息

编辑:如果您确定文件权限正常,并且确实加载了两个文件,我建议在调试模式下运行log4j,在此模式下,log4j将打印内部消息,例如加载的文件和配置的附件。这是调试的最佳选择


要在调试模式下使用log4j,我认为您必须具有一个属性,并将属性
debug=“true”
添加到根元素,一旦完成(并假设配置文件已实际读取),您应该确切地看到log4j正在做什么。

我遵循了以下步骤,它对我有效:

1) 将ur log4j.properties文件放在以下位置: WEB-INF/课程

2) 将log4jXXX.jar文件放在WEB-INF文件夹下的应用程序库文件夹中。如果我们不遵循这个步骤,那么它将获取jboss服务器中已经存在的jar文件,并使用jboss-log4j.xml中提到的jboss现有日志设置

如果它能解决你的问题,请尝试一下

谢谢


Ankit Adlakha

您是否尝试了
log4j.rootLogger=ALL,console,A
?我认为第一行缺少一个。我附加了一个我正在使用的示例文件

log4j.rootLogger = DEBUG, stdout, stderr, dailyfile

log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d] %5p %m (%C::%M:%L)%n

log4j.appender.stderr.Threshold = ERROR
log4j.appender.stderr = org.apache.log4j.ConsoleAppender
log4j.appender.stderr.layout = org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern=[%d] %5p %m (%C::%M:%L)%n

log4j.appender.dailyfile.Threshold = DEBUG
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyfile.File = ./log/Torpedo.log
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=[%d] %5p {%t} %m (%C::%M:%L)%n

log4j.appender.dailyfile.DatePattern ='.'yyyy-MM-dd

我也有完全相同的问题。文件已创建,但仅在控制台中没有任何日志。在我的例子中,这是因为maven项目中不正确的依赖关系

我的
log4j.properties
文件是:

# Root logger option
log4j.rootLogger=DEBUG, file

# Direct log messages to a log file
# configuration to print into file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=10
# Define the layout for file appender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=[%t] %-5p %c %x - %m%n
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Set the name of the file
log4j.appender.file.File=C:\\log\\logging.log
# Set the append to false, overwrite
log4j.appender.file.Append=false
我在POM中使用了:

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.6.2</version>
</dependency>

<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

org.slf4j
slf4j简单
1.6.2
log4j
log4j
1.2.17
是的,它在我需要的地方为我创建了一个文件,但日志在控制台中。然后我将其更改为另一个依赖项,如:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
</dependency>

org.slf4j
slf4j-log4j12
1.7.5
我最终把它放在了文件中而不是控制台中。即使没有任何明确的命令,如
PropertyConfigurator.configure()


另外,请注意属性文件中的配置。因为在您的代码示例中是
控制台
,但是当我在不同的项目上使用相同的属性文件时,您需要使用
文件

哪个包是
TestController
组件,而该项目不是web应用程序,这意味着日志文件是创建的,日志是写入其中的。但当我构建一个web应用程序(diffrenet项目)时,我只能将日志打印到控制台,而不能打印到文件。我从EclipseIDE而不是从命令行运行的两个项目。。log4j.properties文件位于写位置,因为如果没有,我也无法打印到控制台。我不确定我是否遵循了,你的意思是你通过eclipse运行web服务器,比如Jetty或Tomcat,还是你只是在运行单元测试和主类?Asaf,谢谢你的提示(log4j.xml),它向我澄清了很多事情。我能够准确地看到log4在做什么。但是仍然无法理解为什么日志没有打印到日志文件中,没有按照您建议的调试方式写入任何内容。。