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

Posted

技术标签:

【中文标题】如何使用 Log4j 更改包的日志级别?【英文标题】:How do you Change a Package's Log Level using Log4j? 【发布时间】:2010-12-16 02:33:14 【问题描述】:

我遇到了以下错误:

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

它声明如下:

此错误仅在日志级别时发生 对于 org.apache.axiom 是 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

但这显然是错误的,因为此代码返回“日志级别为空”:

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

现在我正在使用代码中设置日志级别

Logger logger = Logger.getLogger("org.apache.axiom");
logger.setLevel(Level.WARN);

【问题讨论】:

我仍然有这个问题 - 我已将 log4j.properties 文件添加到控制台应用程序的根目录,但未添加 log4j.rootLogger=WARN、R 或 log4j.logger.org.apache.axiom =WARN 似乎做了任何事情 - 我得到了和以前一样的错误。 【参考方案1】:

您使用的是哪个应用服务器?每个都将其日志配置放在不同的位置,尽管现在大多数使用 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

阅读一下Log4J 和Commons-Logging 将帮助您了解这一切。

【讨论】:

现在我只是想将一些代码作为控制台应用程序运行。我会看看我是否能弄清楚 log4j.properties 文件应该放在哪里。谢谢。 在带有记录器的 log4j 中不推荐使用类别 作为 log4j 文档的重要说明:“这个观察结果之前导致我们选择 category 作为包的中心概念。但是,从 log4j 版本 1.2 开始,Logger 类已经取代了 Category 类。对于那些熟悉 log4j 早期版本的人,可以将 Logger 类视为 Category 类的别名。”【参考方案2】:

我今天遇到了完全相同的问题,Ryan。

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

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

本杰明,感谢您提供有关如何执行此操作的提示。

【讨论】:

【参考方案3】:

这项工作适合我:

log4j.logger.org.hibernate.type=trace

也可以试试:

log4j.category.org.hibernate.type=trace

【讨论】:

【参考方案4】:

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

    将根记录器级别设置为 WARN 将包日志级别设置为调试

每个日志记录实现都有自己的通过属性或代码设置它的方式(这方面有很多帮助)

不管上述所有情况,我都不会在控制台或日志文件中获得日志。我忽略的是下面...



我对上述杂耍所做的只是控制日志的生成(在根/包/类等处),位于上图中红线的左侧。但是我并没有改变显示/使用相同日志的方式,在上图中的红线右侧。 Handler(Consumption) 通常默认为 INFO,因此您宝贵的调试语句不会通过。通过设置处理程序的日志级别(ConsoleHandler/FileHandler 等)来控制消耗/显示。所以我继续将所有处理程序的日志级别设置为最好,一切正常。

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

我希望有人摸不着头脑,思考为什么这些属性不起作用会发现这有点帮助。

【讨论】:

【参考方案5】:

设置系统属性 log4j.debug=true。然后你可以确定你的配置在哪里运行。

【讨论】:

以上是关于如何使用 Log4j 更改包的日志级别?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用log4j输出单个级别的log到指定文件

logback 更改日志级别需要重启吗

如何log4j的日志级别改成debug

我们可以在运行时更改log4j的日志记录级别吗?

log4j输出日志级别控制

关于log4j日志级别问题,懂的来