log4j - 打印到控制台但不要存档

时间:2012-02-04 18:18:32

标签: 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

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);

为什么无法打印到文件?

顺便说一下,这是一个网络应用程序 当我在简单的独立应用程序上尝试这个时,它运行得很好。

4 个答案:

答案 0 :(得分:1)

如果您说它在您的IDE中运行良好并且它不能用作webapp,则可能是您将log4j.properties文件放在错误的位置。

从命令行运行应用程序时,您可能会向其传递JVM参数: log4j.configuration = /路径/到/我/文件/ log4j.properties

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

另一种方法是将其添加到CATALINA_OPS环境变量中,您可以查看here以获取更多详细信息。

编辑:如果您确定文件权限正常,并且两个文件确实已加载,我建议在调试模式下运行log4j,在此模式下,log4j将打印出内部消息,例如它正在加载什么文件以及正在配置哪些appender。这是调试时最好的选择。

要在调试模式下使用log4j,我认为你必须有log4j XML configuration并将属性debug="true"添加到根元素,一旦完成(假设实际读取了配置文件),你应该看到log4j正在做什么。

答案 1 :(得分:1)

我按照以下步骤操作,它对我有用:

1)将ur log4j.properties文件放在以下内容中: WEB-INF /类

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

请尝试解决您的问题。

由于

Ankit Adlakha

答案 2 :(得分:1)

你试过log4j.rootLogger=ALL,console,A吗?我认为第一行中缺少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

答案 3 :(得分:0)

我有完全相同的问题。文件已创建,但仅在控制台中没有任何登录记录。这是因为在我的情况下,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>

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

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

最后我将其保存在文件中,而不是控制台中。即使没有PropertyConfigurator.configure()之类的任何明确命令。

P.S。并注意在属性文件中进行配置。因为在您的代码示例中为console,但是您需要使用file