如何为文件写入和控制台写入中的每一个指定特定的记录器级别

时间:2018-07-11 04:47:31

标签: spring-boot logging logfactory

我想在logfile.log中仅保留WARN,ERROR和FATAL的日志,而希望将以上所有INFO信息写入到Spring Boot应用程序的控制台中。我看到在执行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) 时,在application.properties文件中,它为整个应用程序设置了WARN的日志级别。如何在控制台中显示所有日志消息,但仅在WARN上方写入文件,该怎么办?

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

UPDATE NG_CAP_SENDER_INFO_MTR SET SENINFO_FROM = TRIM(SENINFO_FROM);

2 个答案:

答案 0 :(得分:0)

好吧,我仔细阅读了一些注销文档,并弄清楚该怎么做。

我正在将此代码发布给其他遇到我这样问题的人,以便快速参考。

但是我建议先阅读正确的文档以清楚地了解它。

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>

答案 1 :(得分:-1)

答案取决于您打算使用哪种实际的日志记录框架, Spring Boot与大多数集成。

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

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

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

因此,实际配置将取决于特定的日志记录框架,通常,人们将XML配置文件(例如logback.xml,如果使用logback的话)放入src/main/resources文件夹中,并且它可以工作。另一个现代的选择是log4j2框架。

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

  • Here是本教程的链接,该教程介绍了如何在Spring Boot中使用这些框架。

  • Here是spring boot官方文档的记录章节