如何使用Log4j更改包的日志级别?

时间:2009-11-12 22:48:56

标签: java logging log4j axis2 axiom

我遇到了以下错误:

http://issues.apache.org/jira/browse/AXIS2-4363

它陈述如下:

  

此错误仅在日志级别时发生   对于org.apache.axiom来说是DEBUG所以a   解决方法是设置日志级别>   DEBUG。

我的问题是如何做到这一点?我一直在搜索我的目录中的属性文件或其他东西,我一直在寻找是否有我可以在代码中设置的东西,但我真的不知道我在做什么。我现在正在桌面上运行一个控制台应用程序,同时试图让它工作。

更新1:我注意到我的Axis2目录在其根目录中有自己的log4j.properties文件。这是否被安全地忽略或是解决方案的一部分(或问题的一部分)?

更新2:根目录log4j.properties文件显然未正确设置。现在它看起来像这样:

log4j.rootLogger=DEBUG, R 
log4j.logger.org.apache.axiom=WARN
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

但这显然是错误的,因为此代码返回“Log level is null”:

System.out.println("Log level is " + logger.getLevel());

目前我正在使用

在代码中设置日志级别
Logger logger = Logger.getLogger("org.apache.axiom");
logger.setLevel(Level.WARN);

5 个答案:

答案 0 :(得分:56)

您使用的是哪个应用服务器?每个人都将其日志配置放在不同的位置,尽管现在大多数人使用Commons-Logging作为Log4J或java.util.logging的包装。

以Tomcat为例,this document说明了使用任一选项配置日志记录的选项。在任何一种情况下,您都需要查找或创建一个配置文件,该文件定义每个包的日志级别以及日志系统将输出日志信息的每个位置(通常是控制台,文件或数据库)。

对于log4j,这将是log4j.properties文件,如果您按照上面链接中的说明操作,您的文件将开始如下:

log4j.rootLogger=DEBUG, R 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=${catalina.home}/logs/tomcat.log 
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

最简单的方法是改变这一行:

log4j.rootLogger=DEBUG, R

类似于:

log4j.rootLogger=WARN, R

但是如果您仍然想要自己的类中自己的DEBUG级别输出,请添加一行:

log4j.category.com.mypackage=DEBUG

Log4JCommons-Logging上稍微阅读将有助于您理解这一切。

答案 1 :(得分:7)

我今天遇到了同样的问题,Ryan。

在我的 src (或您的根目录)目录中,我的 log4j.properties 文件现在添加了以下内容

# https://issues.apache.org/jira/browse/AXIS2-4363
log4j.category.org.apache.axiom=WARN

感谢Benjamin如何做到这一点。

答案 2 :(得分:3)

这项工作适合我:

log4j.logger.org.hibernate.type=trace

也可以尝试:

log4j.category.org.hibernate.type=trace

答案 3 :(得分:2)

我刚刚遇到这个问题,即使在阅读了上述所有内容之后也无法弄清楚出了什么问题。我做的是

  1. 将根记录器级别设置为WARN
  2. 将包日志级别设置为DEBUG
  3. 每个日志记录实现都有自己的方式通过属性或代码设置它(有很多可用的帮助)

    无论上述情况如何,我都不会在我的控制台或日志文件中获取日志。我忽略的是下面的......

    enter image description here

    我所做的一切只是控制了上面图像中红线左侧的日志(在root / package / class等)的生成。但我没有改变显示/消耗上述图像中红线右侧的日志的方式。处理程序(消耗)通常默认为INFO,因此您的宝贵调试声明无法通过。消耗/显示是通过设置处理程序的日志级别(ConsoleHandler / FileHandler等)来控制的。所以我继续将所有处理程序的日志级别设置为最好,一切正常。

    这一点在任何地方都没有以明确的方式表明。

    我希望有人挠头,想想为什么这些属性不起作用会觉得这有点帮助。

答案 4 :(得分:0)

设置系统属性log4j.debug = true。然后,您可以确定配置的运行位置。