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

相關文章
相關標籤/搜索