每个流程实例的唯一日志文件

时间:2018-08-07 11:18:30

标签: java spring-boot intellij-idea slf4j

我有一台我用Java围绕intellij开发的服务器。我创建了许多不同的配置(node1,node2等),每个配置代表另一个服务器和另一个端口,然后通过Spring Boot一起运行它们。

问题是所有服务器的日志都写入同一slf4j日志文件,并且根据我的团队负责人的要求,我需要每台服务器将日志写入单独的文件。

这是错误打印文件的logback.xml文件中的定义:

<property name="LOGS_PATH" value="./logs" />
<appender name="ERROR_LOG_FILE"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <file>${LOGS_PATH}/fullNode_error.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <charset>UTF-8</charset>
        <Pattern>
            %d{dd/MM/yyyy HH:mm:ss.SSS} [%thread][%-5level][%logger{0}] %msg%n
        </Pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${LOGS_PATH}/archived/fullNode_error.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
        <maxFileSize>10MB</maxFileSize>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
</appender>

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您可以这样做:

<file>${LOGS_PATH}/node-${env.NODE_NAME}_error.log</file>

这将从环境中获取NODE_NAME变量,并在文件名中使用它。

在启动应用实例并退出后设置NODE_NAME

您还可以使用:

<file>${LOGS_PATH}/node-${NODE_NAME}_error.log</file>

,当您运行应用程序时,请在启动时执行java -DNODE_NAME=node1 ...

相关问题