Spring启动中特定软件包的自定义日志文件

时间:2018-02-26 07:59:44

标签: spring spring-boot logging logback

我有一个包含专门操作的java包。专业的意义是他们很少使用,我不想让他们与正常的伐木混合。

我知道添加logging.file=myapplication.log会将日志记录重定向到此文件,但有没有办法只指定从特定包到另一个文件的日志记录?喜欢logging.file.my.package=special.log

2 个答案:

答案 0 :(得分:2)

Spring Boot提供的日志配置是不可能的。但是,您可以依赖日志记录框架提供的配置。默认情况下,这是Logback,可配置为记录到多个日志记录文件。

为此,您需要将 logback.xml 文件添加到类路径并配置多个appenders。例如:

<DomainCheckResult>

现在您可以定义一个单独的记录器,以防您想要记录到另一个文件。确保添加<appender name="FILE1" class="ch.qos.logback.core.FileAppender"> <file>log1.log</file> <append>true</append> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <appender name="FILE2" class="ch.qos.logback.core.FileAppender"> <file>log2.log</file> <append>true</append> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> 否则,日志消息仍将打印在两个日志文件中:

additivity="false"

在这种情况下,所有日志都将写入<logger name="com.example.apps.special-package" level="INFO" additivity="false"> <appender-ref ref="FILE2" /> </logger> <root level="INFO"> <appender-ref ref="FILE1" /> </root> log1.log appender),而来自包FILE1的日志将写入com.example.apps.special-package({{1 } appender)。

答案 1 :(得分:2)

Spring使用Logback作为默认记录器。根据{{​​3}},您可以自行设置 logback.xml ,以添加到默认的日志记录机制中,您可以使用特殊的&#39;行为:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>

    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />

    <property name="SPECIAL_FILE_NAME" value="special"/>
    <appender name="SPECIAL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%-10.10thread] %-5level %30.30logger{29}:%-4line %msg%n</pattern>
            <charset>utf8</charset>
        </encoder>
        <file>log/${SPECIAL_FILE_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${SPECIAL_FILE_NAME}-%i.log</fileNamePattern>
        </rollingPolicy>
        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <logger name="logging.file.my.package" level="debug" additivity="false">
        <appender-ref ref="SPECIAL_FILE"/>
    </logger>

    <root level="INFO">
        <appender-ref ref="FILE" />
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

这里我们使用Spring默认FILECONSOLE appender来照常记录应用信息(logging.file.my.package除外),并使用SPECIAL_FILE appender将此包中的信息记录到档案log/special.log