0

我想在我的 logfile.log 中只保留一个 WARN、ERROR 和 FATAL 的日志,而希望在我的 Spring Boot 应用程序中将所有上述信息写入控制台。我看到当我这样做时log.level.root=WARN,在 application.properties 文件中它为整个应用程序设置了 WARN 的日志级别。我该怎么做才能在控制台中显示所有日志消息,但只在文件中写入 WARN 以上的消息?

还!!!!有没有办法将级别设置为 INFO 并仅在文件中写入某些指定的日志。例如。我想使用 INFO 级别跟踪日志中的每个登录/注销/文件更改(例如与业务逻辑相关),但不想看到在应用程序启动期间弹出的默认 INFO 消息,例如

2018-07-11 10:19:00.554 INFO 11190 --- [ main] c.v.guruji.GurujiApplication : Started GurujiApplication in 10.307 seconds (JVM running for 11.029) .

4

2 回答 2

0

答案取决于您计划使用哪个实际的日志记录框架,spring boot 与其中的大多数集成。

通常,如果您选择“零配置”,请使用application.properties / yaml以下行在 Spring Boot 配置文件 () 中指定事件级别:

logging.level.com.myorg=DEBUG
logging.level.root=INFO

如果你想写入文件,或者通常提供更灵活的配置,你需要配置一个叫做 appender 的东西,但这不是 Spring Boot 的概念,而是一个日志框架术语。

所以实际的配置将取决于特定的日志框架,通常,人们将 XML 配置文件(如 logback.xml,如果你使用 logback)放到src/main/resources文件夹中,它就可以工作。另一个现代选项是 log4j2 框架。

从问题看来,您最好先了解如何使用这些框架,然后尝试将它们集成到 Spring Boot 中,它们中的每一个都非常灵活,并且会提供您正在寻找的解决方案

  • 是有关如何将每个框架与 Spring Boot 一起使用的教程的链接

  • 是spring boot官方文档的日志章节

于 2018-07-11T05:21:21.990 回答
0

好吧,我浏览了一些 logback 文档,并且几乎想出了该怎么做。

我将此代码发布给其他会遇到像我这样的问题的人以供快速参考。

但我建议首先阅读适当的文档以清楚地理解它。

logback.xml(用于将每个级别的日志记录在单独的文件中并在控制台中显示全部)

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

<property name="DEV_HOME" value="logs" />

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
        </Pattern>
    </layout>
</appender>



<appender name="FILE-ERROR"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${DEV_HOME}/error.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/error.%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

</appender>



<appender name="FILE-INFO"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${DEV_HOME}/info.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/info.%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

</appender>



<appender name="FILE-FATAL"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${DEV_HOME}/fatal.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>FATAL</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/fatal.%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

</appender>


<appender name="FILE-WARN"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${DEV_HOME}/warn.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>WARN</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/warn.%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

</appender>


<!-- Send logs to both console and file audit -->

<logger name="com.vaidiksanatansewa.guruji" level="fatal"
        additivity="false">

    <appender-ref ref="FILE-FATAL" />
</logger>


<logger name="com.vaidiksanatansewa.guruji" level="error"
        additivity="false">

    <appender-ref ref="FILE-ERROR" />
</logger>


<logger name="com.vaidiksanatansewa.guruji" level="warn"
        additivity="false">

    <appender-ref ref="FILE-WARN" />
</logger>


<logger name="com.vaidiksanatansewa.guruji" level="info"
        additivity="false">

    <appender-ref ref="FILE-INFO" />
</logger>

<root level="INFO">
    <appender-ref ref="STDOUT" />
</root>

于 2018-07-16T13:54:34.023 回答