我正在使用这个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);
为什么无法打印到文件?
顺便说一下,这是一个网络应用程序 当我在简单的独立应用程序上尝试这个时,它运行得很好。
答案 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文件夹下的应用程序lib文件夹中。如果我们不执行此步骤,那么它将获取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
。