在 JBoss 7.1.1 中使用 DEBUG 级别进行日志记录

Posted

技术标签:

【中文标题】在 JBoss 7.1.1 中使用 DEBUG 级别进行日志记录【英文标题】:Logging with DEBUG level in JBoss 7.1.1 【发布时间】:2014-03-29 11:22:33 【问题描述】:

目标:我的应用程序应该有错误和调试级别的消息。日志级别必须通过 JBoss Admin Console 设置(切换)。日志应该写入标准的 JBoss 日志文件和服务器控制台。

我尝试使用 java.util.logging.Logger,但是这个记录器没有必要的级别。 我用 slf4j 切换到 log4j。存在 ERROR 级别的消息。 DEBUG 和 System.out.println 有问题。 有趣的是,该 DEBUG 级别在测试阶段是可见的。

 import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    /**
     * Logger creation and configuration
     */
    public class ResourcesLog 

        @Produces
        Logger getLog(InjectionPoint ip) 
            String category = ip.getMember().getDeclaringClass().getName();
            return LoggerFactory.getLogger(category);
        
    

或者只是 LOG = LoggerFactory.getLogger(MyClass.class); Pom 文件:

<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.6</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.6</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.6</version>

        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.6</version>
        </dependency>

也许包含不必要的。我无法将 slf4j-simple 和 slf4j-api 设置为“已提供” - 出现错误。这个库应该在战争中吗?

WEB-INF 中的 jboss-deployment-structure.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.apache.commons.logging" />
            <module name="org.apache.log4j" />
            <module name="org.jboss.logging" />
            <module name="org.jboss.logging.jul-to-slf4j-stub" />
            <module name="org.jboss.logmanager" />
            <module name="org.jboss.logmanager.log4j" />
            <module name="org.slf4j" />
            <module name="org.slf4j.impl" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

资源文件夹中的 log4j.xml 设置(在战争中位于 'WEB-INF/classes/log4j.xml' 中):

<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
        <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
        <param name="File" value="$jboss.server.log.dir/server.log"/>
        <param name="Append" value="true"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
        </layout>
    </appender>
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
        <param name="Target" value="System.out"/>
        <param name="Threshold" value="DEBUG"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%dABSOLUTE %-5p [%c1] %m%n"/>
        </layout>
    </appender>
    <category name="org.mypackage">
        <priority value="DEBUG"/>
    </category>
    <root>
        <level value="INFO"/>
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</log4j:configuration>

【问题讨论】:

在 JBoss 管理控制台中,我在“日志类别”中有设置: 对于名称为“org.mypackage”级别“DEBUG”的类别 我发现解决方案会在 JBoss 管理控制台中的控制台处理程序上更改日志级别。但它适用于所有包,我只想为“org.mypackage”设置。有什么想法吗? 【参考方案1】:

由于您希望日志转到标准日志记录配置,并且您希望使用管理选项控制此配置,因此无需使用 log4j。放弃log4j.xmljboss-deployment-structure.xml。此外,您只需要 slf4j-api 并且需要将其标记为已提供。

接下来您需要在服务器上配置一个记录器。在 CLI 中,对于独立服务器,它将是如下命令

/subsystem=logging/logger=org.mypackage:add(level=DEBUG)

您还需要设置控制台处理程序和文件处理程序以允许调试消息。默认情况下,文件处理程序已设置为打印调试消息。要更改控制台处理程序以允许调试消息,请执行以下 CLI 命令。

/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=DEBUG)

这些更改也可以在 Web 控制台中进行。

【讨论】:

以上是关于在 JBoss 7.1.1 中使用 DEBUG 级别进行日志记录的主要内容,如果未能解决你的问题,请参考以下文章

如何让Jboss的debug在myeclise上运行

无法在jboss AS 7.1.1中部署war文件

eclipse 在jboss的debug配置(ubuntu系统)

在Windows 7 64位上启动JBoss 7.1.1时出错

jboss 7.1.1 Final 的jsp热部署解决方案

JAX-RS + JBoss 7.1.1 + RESTEasy:使用 CDI 的 NullPointException