Spring boot + Logger + logback实现日志输出到指定文件

  • 问题:但愿将订单错误日志输出到特定日志文件,方便查看,避免与其余日志混在一块html

  • 解决思路:经过logback配置输出文件,使用logger输出日志java

  • 解决办法:spring

配置:【logback-spring.xml】app

<!--
     定义订单异常日志输出文件
     目的:但愿提交订单出错信息可单独输出到指定日志文件,方便查看
-->
<appender name="ERROR_ORDER_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>log/food/error-order.log</File>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>log/food/error-order-%d{yyyyMMdd}.log.%i</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy 
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>50MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <maxHistory>2</maxHistory>
    </rollingPolicy>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n
        </Pattern>
    </layout>
</appender>
<!--
    定义logger名称,指定日志输出文件
    使用方式:
    // 获取logger
    Logger logger = LoggerFactory.getLogger("ERROR_ORDER");
    // 输出日志
    logger.error("====error");
-->
<logger name="ERROR_ORDER" additivity="false">
    <appender-ref ref="ERROR_ORDER_FILE"/>
</logger>

测试代码dom

/**
 * 测试order异常日志输出
 * order相关日志输出到特定文件
 * Created by William on 2017/12/17.
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class OrderLoggerTest {
    private Logger logger = LoggerFactory.getLogger("ERROR_ORDER");
    [@Before](https://my.oschina.net/u/3870904)
    public void setUp() {
    }
    [@Test](https://my.oschina.net/azibug)
    public void testAll() {
        logger.info("====info");
        logger.warn("====warn");
        logger.error("====error");
    }
}

<!--
     定义订单异常日志输出文件
     目的:但愿提交订单出错信息可单独输出到指定日志文件,方便查看
-->
<appender name="ERROR_ORDER_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>log/food/error-order.log</File>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>log/food/error-order-%d{yyyyMMdd}.log.%i</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy 
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>50MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <maxHistory>2</maxHistory>
    </rollingPolicy>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n
        </Pattern>
    </layout>
</appender>
<!--
    定义logger名称,指定日志输出文件
    使用方式:
    // 获取logger
    Logger logger = LoggerFactory.getLogger("ERROR_ORDER");
    // 输出日志
    logger.error("====error");
-->
<logger name="ERROR_ORDER" additivity="false">
    <appender-ref ref="ERROR_ORDER_FILE"/>
</logger>

执行效果测试

执行效果

  • 总结

解决办法总比问题多,只要去寻找就会有答案.net

  • 参考文章

经过LOGBACK实现每一个类、包或自定义级别日志

logback,利用java包名对包内全部类定义输出形式code

相关文章
相关标签/搜索