女朋友问的那些问题—log.info在测试环境正常打印,上了生产就废?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 测试一个方法的执行时间,在这个方法中第一行和最后一行中输出了一下当前时间的long值,以此来判断出方法的执行时间。

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


女朋友今天接到的需求是测试一个方法的执行时间,然后就在这个方法中第一行和最后一行中输出了一下当前时间的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来指定环境参数即可。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
存储 Kubernetes 测试技术
阿里云块存储问题之生产代码与测试代码需要同步原子提交如何解决
阿里云块存储问题之生产代码与测试代码需要同步原子提交如何解决
39 0
|
7月前
|
JavaScript API
【vue】分环境构建(开发/测试/生产)配置
【vue】分环境构建(开发/测试/生产)配置
54 1
|
存储 Prometheus 监控
重磅!DIY的Prometheus主备方案,全网唯一。生产未上,测试先行。
重磅!DIY的Prometheus主备方案,全网唯一。生产未上,测试先行。
322 0
|
编解码 算法 测试技术
如何生产兼容性强的自动化测试脚本
如何生产兼容性强的自动化测试脚本
289 0
|
存储 NoSQL 网络协议
MongoDB系列-复制集(Replica Set)应用部署(生产、测试、开发环境)
通过在不同的计算机上托管mongod实例来尽可能多地保持成员之间的分离。将虚拟机用于生产部署时,应将每个mongod实例放置在由冗余电源电路和冗余网络路径提供服务的单独主机服务器上,而且尽可能的将副本集的每个成员部署到自己的计算机绑定到标准的MongoDB端口27017。
565 0
|
人工智能 自动驾驶 机器人
【AI TOP 10】今年最值得关注的三项大脑技术;北京首条自动驾驶测试道路将落地亦庄;中国军工厂用机器人生产弹药
近日,美国《科学美国人》刊发文章,对2018年大脑技术的发展做了预测,认为将会出现脑控技术、神经颗粒和微型大脑。而日产也正计划用脑波控制无人驾驶汽车。同样,北京首条自动驾驶测试道路将落地亦庄、福布斯预测苹果将收购特斯拉等要闻也值得关注。
2387 0
|
测试技术 C语言
《C语言程序设计进阶教程》一3.4 生产代码与测试代码分离
本文讲的是C语言程序设计进阶教程一3.4 生产代码与测试代码分离,本节书摘来华章计算机《C语言程序设计进阶教程》一书中的第3章,第3.3节, Intermediate C Programming[美] 陆永祥(Yung-Hsiang Lu) 著 徐东 译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1292 0