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

问题描述 投票:0回答:6

我遇到了以下错误:

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);
java logging log4j apache-axis axiom
6个回答
65
投票

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

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

对于 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

但是,如果您仍然希望从自己的类中获得自己的调试级别输出,请添加一行:

log4j.category.com.mypackage=DEBUG

阅读一些关于 Log4JCommons-Logging 将帮助您理解这一切。


9
投票

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

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

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

感谢本杰明告知如何执行此操作。


7
投票

这对我有用:

log4j.logger.org.hibernate.type=trace

也可以尝试:

log4j.category.org.hibernate.type=trace

3
投票

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

  1. 将根记录器级别设置为 WARN
  2. 将包日志级别设置为DEBUG

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

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



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

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

我希望那些挠头思考为什么这些属性不起作用的人会发现这有点帮助。


0
投票

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


0
投票

Log4J2 似乎支持使用环境变量在运行时更改日志级别。

例如,此配置将使用

LOG_LEVEL
环境变量,或者如果未设置环境变量,则默认为
info

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <!-- other config elements -->
    <Loggers>
        <Root level="${env:LOG_LEVEL:-info}">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
© www.soinside.com 2019 - 2024. All rights reserved.