0

基本上我需要使用 jboss7 日志机制在同一个类中以相同的记录器阈值记录两条消息。请让我知道如何详细完成?我遵循了您建议的方法,并创建了两个周期性旋转文件处理程序,如下所示

            <periodic-rotating-file-handler name="FILE_DEBUG">
                <level name="DEBUG"/>
                <formatter>
                    <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
                </formatter>
                <file relative-to="jboss.server.log.dir" path="File111_debug.log"/>
                <suffix value=".yyyy-MM-dd"/>
                <append value="true"/>
            </periodic-rotating-file-handler>

            <periodic-rotating-file-handler name="FILE_INFO">
                <level name="INFO"/>
                <formatter>
                    <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
                </formatter>
                <file relative-to="jboss.server.log.dir" path="File222_info.log"/>
                <suffix value=".yyyy-MM-dd"/>
                <append value="true"/>
            </periodic-rotating-file-handler>

            <logger category="com.mypackage">
                <handlers>
                    <handler name="FILE_DEBUG"/>
                    <handler name="FILE_INFO"/>
                </handlers>
            </logger>

        <root-logger>
            <level name="DEBUG"/>
            <handlers>
                <handler name="CONSOLE"/>
            </handlers>
        </root-logger>

and in my class, I have declared as below,

package com.mypackage.log

ClassA{
private static final Logger loggerDebug = Logger.getLogger("FILE_DEBUG");
private static final Logger loggerInfo = Logger.getLogger("FILE_INFO");

method1()
{
    loggerDebug.debug("This message should be logged into  DEBUG log file");
        loggerInfo.info("This message should be logged into  INFO log file");
}

}

尽管在日志文件夹下创建了新的记录器文件,但上述行并未打印在相应的日志文件中。

感谢您是否可以帮助我检查配置中出了什么问题?

4

1 回答 1

0

您可以将处理程序分配给记录器,但通过该记录器记录的所有消息都将使用指定的处理程序。

解决这个问题的最简单方法是使用两个不同的记录器类别。使用Logger.getLogger(Class<?>)只是Logger.getLogger(Class<?>.getName()). 这意味着您可以执行以下操作:

package com.example;

class ClassA {
    private static final Logger LOGGER1 = Logger.getLogger(ClassA.class.getName() + "1");
    private static final Logger LOGGER2 = Logger.getLogger(ClassB.class.getName() + "2");

    void method1() {
        LOGGER1.info("This message should be logged to a file called File111"); 
        LOGGER2.info("This message should be logged to a file called File222");
    }
}

然后配置日志子系统,如:

<subsystem xmlns="urn:jboss:domain:logging:1.1">
    ...
    <periodic-rotating-file-handler name="FILE1">
        <formatter>
            <pattern-formatter pattern="%d{HH:mm:ss,SSS} "/>
        </formatter>
        <file relative-to="jboss.server.log.dir" path="File111.log"/>
        <suffix value=".yyyy-MM-dd"/>
        <append value="true"/>
    </periodic-rotating-file-handler>
    <periodic-rotating-file-handler name="FILE2">
        <formatter>
            <pattern-formatter pattern="%d{HH:mm:ss,SSS} "/>
        </formatter>
        <file relative-to="jboss.server.log.dir" path="File222.log"/>
        <suffix value=".yyyy-MM-dd"/>
        <append value="true"/>
    </periodic-rotating-file-handler>

    <logger category="com.example1">
        <level name="INFO"/>
        <handlers>
            <handlers name="FILE1"/>
        </handlers>
    </logger>

    <logger category="com.example2">
        <level name="INFO"/>
        <handlers>
            <handlers name="FILE2"/>
        </handlers>
    </logger>
    ...
</subsystem>

另一种选择是在记录器类别上使用过滤器,但这需要了解某种模式,即什么消息发送到什么处理程序。

于 2013-04-25T15:31:42.410 回答