问题描述
目前,我的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>
第一次测试成功。到目前为止,没有多余的重复日志记录。