Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 异步记录到2个文件_Logging_Asynchronous_Logback - Fatal编程技术网

Logging 异步记录到2个文件

Logging 异步记录到2个文件,logging,asynchronous,logback,Logging,Asynchronous,Logback,我想异步记录到2个文件,一个用于系统日志记录,另一个用于用户操作日志记录。到目前为止,我正在登录到一个文件,我的配置文件如下所示: <configuration debug="true"> <property name="LOG_DIR" value="C:/blah" /> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <en

我想异步记录到2个文件,一个用于系统日志记录,另一个用于用户操作日志记录。到目前为止,我正在登录到一个文件,我的配置文件如下所示:

<configuration debug="true">

    <property name="LOG_DIR" value="C:/blah" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{DD/MM/YYYY-HH:mm:ss.SSS} %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${LOG_DIR}/log.txt</file>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <logger name="com.logger.name" level="DEBUG" />

    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="FILE" />
    </appender>

    <root level="warn">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="ASYNC" />
    </root>

</configuration>
public static final Logger LOG = LoggerFactory.getLogger("com.logger.name");
这很好,但如果我想登录到两个单独的文件,是否需要编写第二个配置文件?我还需要第二个
记录器
对象吗?我希望有一个配置,并指定在创建
Logger
对象时记录到哪个文件,这可能吗?谢谢

编辑


为了澄清,我想将用户操作记录到一个文件中,将系统日志记录到另一个文件中。

您可以使用两个文件附加器,一个用于系统日志记录,另一个用于用户操作日志记录。文件appnder扩展了
UnsynchronizedAppenderBase
,因此它们是异步的。无需创建日志记录器对象。这里有一个例子

<appender name="fileAppender1" class="ch.qos.logback.core.FileAppender">
        <file>c:/kp/kp1.log</file>
        <filter class="com.kp.filters.KPFilter">
        </filter>
        <append>true</append>
        <encoder>
            <pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="fileAppender1" />
    </root>

    <appender name="fileAppender2" class="ch.qos.logback.core.FileAppender">

        <file>c:/kp/kp2.log</file>
        <append>true</append>
        <encoder>
            <pattern>
                %d [%thread] %-5level %logger{30} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <logger name="org.kp">
        <appender-ref ref="fileAppender2" />
        <level value="debug"/>
    </logger>
您可以用通常的方式初始化日志。例如,如果您想登录MyClass

private static final Logger LOG = LoggerFactory.getLogger(MyClass.class);
LOG.warn("Hello");

Logback将日志实例传递给两个appender。将写入两个不同的文件。

那么您的意思是我不需要引用
AsyncAppender
中的文件appender?另外,在登录到2个文件时,您如何用java初始化记录器?@Sionnach733更新了答案,是不需要它已经是异步的,而是为第二个文件再创建一个附加器OK,谢谢,我已经完成了。我应该重新措辞我的问题。我想将用户操作记录到一个文件中,将系统日志记录到另一个文件中。您可以在一个文件中为每个文件添加筛选器接受所有系统日志,并在另一个文件中拒绝所有其他日志所有用户操作和拒绝所有其他日志。我现在明白了,演示如何在您的答案中进行筛选,我将接受
<logger name="com.kp">
        <level value="trace" />
        <appender-ref ref="fileappender2" />
</logger>
**EDITED:**
private static final Logger LOG = LoggerFactory.getLogger(MyClass.class);
LOG.warn("Hello");