zoukankan      html  css  js  c++  java
  • 03-项目中为什么建议使用日志,而不是sysout

    项目中为什么建议使用日志,而不是sysout

    如果在实际开发中,所有想查看数值的地方都使用sysout方式打印,会给项目上线运行带来问题。

    sysout本质是是一个IO操作,通常IO的操作是比较消耗性能的。如果项目的sysout很多,那么对性能的影响就比较大了。

    即使上线前专门花时间删除代码中的sysout,也很有可能遗漏,而且非常麻烦。

    而如果使用日志系统,那么通过修改日志级别,就可以批量地控制信息的打印。

    优先级从高到低分别是ERROR、WARN、INFO、DEBUG

    如果设置打印某一级别,则会打印当前级别,和比它级别高的日志

    @Test
    public void testLog(){
        Logger logger = LoggerFactory.getLogger(CrowdTest.class);
        //优先级从高到低分别是ERROR、WARN、INFO、DEBUG
        //如果设置打印某一级别,则会打印当前级别,和比它级别高的日志
        logger.debug("debug level!");
        logger.debug("debug level!");
        logger.debug("debug level!");
    
        logger.info("info level!");
        logger.info("info level!");
        logger.info("info level!");
    
        logger.error("error level!");
        logger.error("error level!");
        logger.error("error level!");
    
        logger.warn("warn level!");
        logger.warn("warn level!");
        logger.warn("warn level!");
    }
    

    一般使用slf4j接口,因为这是一个统一的接口

    底层可以更换不同的日志系统。

    我这里使用的是jcl-over-slf4j

    在logback.xml中可以控制日志级别:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="true">
        <!-- 指定日志输出的位置 -->
        <appender name="STDOUT"
                  class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <!-- 日志输出的格式 -->
                <!-- 按照顺序分别是:时间、日志级别、线程名称、打印日志的类、日志主体
                内容、换行 -->
                <pattern>[%d{HH:mm:ss.SSS}]
                    [%-5level]
                    [%thread]
                    [%logger]
                    [%msg]%n</pattern>
            </encoder>
        </appender>
        <!-- 设置全局日志级别。日志级别按顺序分别是:DEBUG、INFO、WARN、ERROR -->
        <!-- 指定任何一个日志级别都只打印当前级别和后面级别的日志。 -->
        <root level="INFO">
            <!-- 指定打印日志的 appender,这里通过“STDOUT”引用了前面配置的 appender -->
            <appender-ref ref="STDOUT" />
        </root>
        <!-- 根据特殊需求指定局部日志级别 -->
        <logger name="top.bigking.crowd.mapper" level="DEBUG"/>
    </configuration>
    

    在这里涉及到三个东西:

    <!-- 日志 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
    </dependency>
    <!-- 其他日志框架的中间转换包 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
    </dependency>
    

    slf4j只是一个接口,没有具体的实现

    logback是具体的日志系统,但是输出的日志,是logback自己的类型

    所以我们引入了jcl-over-slf4j,把类型定向到slf4j

    这样做的好处是:我们在顶端,只需要面向slf4j接口编程,而不需要管底下的日志系统到底是哪一种类型,日后更改日志系统的时候,非常方便。

    金麟岂是池中物,一遇风云便化龙!
  • 相关阅读:
    个人信息
    两个整数的最小公倍数和最大公约数
    java杨辉三角实现
    只会用这简单的递归求阶乘
    图形界面设计
    圆的面积,周长,圆柱体的体积(类的封装与抽象)
    杨辉三角
    1~10的阶乘java语言编程
    个人信息与计算器
    个人信息显示界面
  • 原文地址:https://www.cnblogs.com/ABKing/p/12492083.html
Copyright © 2011-2022 走看看