女朋友问的那些问题—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来指定环境参数即可。