天天看點

女朋友問的那些問題—log.info在測試環境正常列印,上了生産就廢?

【需求】列印日志内容到控制台

女朋友今天接到的需求是測試一個方法的執行時間,然後就在這個方法中第一行和最後一行中輸出了一下目前時間的long值,以此來判斷出方法的執行時間。

但,終究還是有問題,測試上列印的日志好好的,結果一上生産環境,就完蛋了,根本就在主日志檔案中沒有找到相關的日志,悲哀。

【問題】日志元件在測試環境和生産環境列印不一緻

這裡的問題就是生産環境和測試環境的日志列印不一緻問題,其實也是很好定位的,隻需要檢視log日志用的是哪個元件,随後判斷出log元件的配置檔案,檢視生産和測試環境下列印規則是否一緻。

這個問題可能也不是我說的這種情況,但是恰巧這個解決方案正好解決她現在的問題,雖然有點無腦。

【結果】

logback元件的使用,在于logger.xml中的配置規則,一般都會根據不同的環境,配置設定不同的列印規則。

我大概列一下logback的相關配置吧,這是我項目中常用的一些規則。

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

    <contextName>logback</contextName>
    <springProperty scope="context" name="logPath" source="logging.path"/>
    <property name="log.path" value="${logPath}" />

    <!--輸出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 時間滾動輸出 level為 INFO 日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/log_info.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <springProfile name="test">
        <logger name="com.wingtra.ymt" level="debug"/>
        <root level="debug">
            <appender-ref ref="CONSOLE"/>
        </root>
    </springProfile>

    <springProfile name="dev">
        <logger name="com.wingtra.ymt" level="debug"/>
        <root level="debug">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
        </root>
    </springProfile>

    <springProfile name="pro">
        <root level="info">
            <appender-ref ref="INFO_FILE"/>
        </root>
    </springProfile>

</configuration>      

這個是logback.xml的配置,在這裡面使用springProfile來指定環境參數即可。