logback info/error打印在同一文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logback info/error打印在同一文件相关的知识,希望对你有一定的参考价值。

参考技术A logback.xml

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

<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <springProperty scope="context" name="moduleName" source="spring.application.name"

                    defaultValue="application"/>

    <springProperty scope="context" name="logsPath" source="logging.path"

                    defaultValue="logs"/>

    <springProperty scope="context" name="hostname" source="eureka.instance.ip-address"

                    defaultValue="127.0.0.1"/>

    <property name="log.base" value="$logsPath" /> <!-- 日志路径,这里是相对路径,web项目eclipse下会输出到eclipse的安装目录下,如果部署到linux上的tomcat下,会输出到tomcat/bin目录 下 -->

    <property name="log.moduleName" value="$moduleName" />  <!-- 模块名称, 影响日志配置名,日志文件名 -->

    <property name="log.max.size" value="100MB" /> <!-- 日志文件大小,超过这个大小将被压缩,或者第二天时,昨天的日志不过有没有超过这个大小也会压缩 -->

    <!-- 参考SpringBoot默认的logback配置,增加了error日志文件 -->

    <!-- org/springframework/boot/logging/logback/base.xml  -->

    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />

    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />

    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

    <property name="LOG_PATH" value="$LOG_PATH:-$LOG_TEMP:-$java.io.tmpdir:-/tmp"/>

    <property name="CONSOLE_LOG_PATTERN" value="$CONSOLE_LOG_PATTERN:-%clr(%d$LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS)faint %clr($LOG_LEVEL_PATTERN:-%5p) %clr($PID:- )magenta %clr(---)faint %clr([%15.15t])faint %clr(%-40.40logger39)cyan %clr(:)faint %m%n$LOG_EXCEPTION_CONVERSION_WORD:-%wEx"/>

    <property name="FILE_LOG_PATTERN" value="$FILE_LOG_PATTERN:-%d$LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS $LOG_LEVEL_PATTERN:-%5p $PID:- --- [%t] %-40.40logger39 : %m%n$LOG_EXCEPTION_CONVERSION_WORD:-%wEx"/>

    <!-- 控制台日志 -->

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

        <encoder>

            <pattern>$CONSOLE_LOG_PATTERN</pattern>

        </encoder>

    </appender>

    <appender name="file-info" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <append>true</append>

        <prudent>false</prudent>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <!-- rollover daily hours -->

            <fileNamePattern>$log.base/archive/$log.moduleName-INFO-%dyyyy-MM-dd-%i.log.zip </fileNamePattern>

            <timeBasedFileNamingAndTriggeringPolicy

                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <!-- or whenever the file size reaches 100MB -->

                <maxFileSize>$log.max.size</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

            <maxHistory>30</maxHistory>

        </rollingPolicy>

        <encoder>

            <pattern>%-4relative %dyyyy-MM-dd HH:mm:ss.SSS [%thread] %-5level %logger35 - %msg%n

            </pattern>

        </encoder>

        <!-- 此日志文件只记录info级别,不记录大于info级别的日志 -->

        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <level>INFO</level>

            <level>ERROR</level>

        </filter>

    </appender>

    <!-- 异步输出 -->

    <appender name ="async-file-info" class= "ch.qos.logback.classic.AsyncAppender">

        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->

        <discardingThreshold >0</discardingThreshold>

        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->

        <queueSize>512</queueSize>

        <!-- 添加附加的appender,最多只能添加一个 -->

        <appender-ref ref ="file-info"/>

    </appender>

    <!-- 日志总开关 -->

    <root level="INFO">

        <appender-ref ref="CONSOLE" />

        <appender-ref ref="async-file-info" />

        <!--<appender-ref ref="FILE_ERROR" />-->

    </root>

    <!-- 日志过滤 -->

    <!--<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>-->

    <!--<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>-->

    <!--<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>-->

    <!--<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>-->

    <!--<logger name="org.apache.tomcat.util.net.NioselectorPool" level="WARN"/>-->

    <!--<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>-->

    <!--<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>-->

</configuration>

Logback日志系统

参考技术A logback的易用性不用多讲,只需要通过下面两行就可以在console中输出日志:

程序运行时,logback会查找默认的配置文件logback.xml或者logback-test.xml文件,如果没有找到它就会使用默认的配置,将日志打印到console中。下面是一个配置文件示例:

在多数的Log工具中,级别是可以传递,例如如果指定了日志输出级别为DEBUG,那么INFO、ERROR级别的log也会出现在日志文件。这种默认给程序的调试带来了很多的麻烦。而在logback中可以通过appender中的filter来严格限制日志的输出级别:

有时候一个类中可能要求打印不同的日志信息,例如有的用来调试,有的用来记录程序运行中的某些参数的变化等等。这时候可以通过下面的语句声明不同的日志:

在程序调试中,经常出现的情况是:错误只在某一个或者几个类或者包里,所以只需要打开这几个类或者包里的DEBUG级别的log。在以前的项目,使用spring和hibernate时,一旦打开DEBUG级别的log,程序本身的debug信息就会被Spring和Hibernate的大量日志淹没,大大降低了调试的效率。而logback让这一切变的简单起来了:

以上是关于logback info/error打印在同一文件的主要内容,如果未能解决你的问题,请参考以下文章

Logback在项目中如何使用

Logback最佳实践

logback整合控制台sysout输出到日志文件

shop--13.日志 logback SLF4j

Logback日志系统

Logback:只输出Info和Error级别的日志,并输出到不同的文件