Logstash同时写入syslog和daemon.log

问题描述

目前,我的Java进程同时在syslog和daemon.log中写入。
几个月前,我以JSON格式添加了并行写入功能-但我认为这不应该是这里的问题。

如何避免同时写入syslog和daemon.log? 这是我的logback-spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<include resource="org/springframework/boot/logging/logback/basic.xml" />
<springProperty scope="context" name="logs" source="logging.path"
    defaultValue="." />

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d [%thread] %-5level %logger{36} - %msg %n
        </pattern>
    </encoder>
</appender>

<appender name="STDOUT"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logs}/app.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        ...
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        ...
    </rollingPolicy>
    <encoder>
        <pattern>%d [%thread] %-5level %logger{36} - %msg%n
        </pattern>
    </encoder>
</appender>

<appender name="STDOUT_JSON"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logs}/app.json.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        ...
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        ...
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>

<appender name="STDERR"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logs}/error.log</file>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        ...
    </rollingPolicy>
    <encoder>
        <pattern>%d [%thread] %-5level %logger{36} - %msg%n
        </pattern>
    </encoder>
</appender>

<appender name="STDERR_JSON"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logs}/error.json.log</file>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        ...
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>

<appender name="ProcessLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logs}/process.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        ...
    </rollingPolicy>
    <encoder>
        <pattern>%d %-5level %msg%n</pattern>
    </encoder>
</appender>

<appender name="ProcessLogJson" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logs}/process.json.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        ...
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>

<logger name="ProcessLog" level="INFO">
    <appender-ref ref="ProcessLog" />
    <appender-ref ref="ProcessLogJson" />
</logger>
<logger name="com.base22" level="TRACE" />

<root level="info">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="STDOUT" />
    <appender-ref ref="STDOUT_JSON"/>
    <appender-ref ref="STDERR" />
    <appender-ref ref="STDERR_JSON" />
</root>
@H_502_8@

将STDOUT重命名一个名称解决问题吗?
进入process.log,error.log等所有内容也不应出现在syslog中。

解决方法

我将附加程序的名称更改为STDOUT_PLANE和STDERR_PLANE:

<appender name="STDOUT_PLANE"
...
<appender name="STDERR_PLANE"
...
<root level="info">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="STDOUT_PLANE" />
    <appender-ref ref="STDOUT_JSON"/>
    <appender-ref ref="STDERR_PLANE" />
    <appender-ref ref="STDERR_JSON" />
</root>

第一次测试成功。到目前为止,没有多余的重复日志记录。