zoukankan      html  css  js  c++  java
  • 日志的使用

    spring boot中如何配置https://blog.csdn.net/flysun3344/article/details/80555746

    由于spring boot框架的特殊配置,所以无需向ssm框架一样,需要在配置文件中加载logback.xml,只要按照规范来命名就会自动加载

    由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。

    根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

    • Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy

    • Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml

    • Log4j2:log4j2-spring.xml, log4j2.xml

    • JDK (Java Util Logging):logging.properties

    配置路径:https://www.cnblogs.com/taiyonghai/p/9290641.html

    java里面日志分为两部分一个门面、一个实现,我们所熟知的SLF4j、Log4j、Log4j2、Logback的日志组件slf4j是门面提供的统一的入口,具体实现由log4j、log4j2、logback来实现

    log4j由于太老作者自己也不打算重构了所以放弃

    log4j2是apach的一个项目很好,但支持上面略有欠缺所以放弃

    logback是之前log4j的作者自己开源的一个新的log组件,做了大量的调整及优化,性能及使用性上都有很大的提高,再加上沉淀了很多年又完全实现了slf4j,所以被我们选中使用更多了解可以去它

    logback的配置:https://www.jianshu.com/p/04065d8cb2a9;

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="30 seconds" debug="false">
        <!-- 尽量别用绝对路径,如果带参数不同容器路径解释可能不同,以下配置参数在pom.xml里 -->
        <!--定义参数,后面可以通过${SERVER_NAME}使用-->
        <property name="SERVER_NAME" value="checkstand-service" />
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <property name="LOG_HOME" value="logs" />
        <!-- 日志最大的历史 30天 -->
        <property name="MAX_HISTORY" value="30"></property>
        <!-- 日志文件大小 -->
        <property name="MAX_SIZE" value="100MB" /> <!-- 日志文件大小 -->
    
        <!--ConsoleAppender用于向控制台输出 -->
        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
            <!--定义控制台输出格式-->
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method():%L -%msg%n</Pattern>
            </encoder>
        </appender>
    
        <!--向文件输出日志内容的组件 日志文件输出 -->
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--定义日志滚动的策略-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--定义文件滚动时的文件名的格式-->
                <fileNamePattern>
                    ${LOG_HOME}/paychstandservice.log.%d{yyyy-MM-dd}.log
                </fileNamePattern>
                <!--设置为30天的时间周期,日志量最大20GB-->
                <maxHistory>${MAX_HISTORY}</maxHistory>
            </rollingPolicy>
            <!--定义输出格式-->
            <encoder>
                <pattern>%-20(%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]) %-5level %logger{80} - %msg%n</pattern>
            </encoder>
        </appender>
    
    
    
        <!--root是默认的logger 这里设定输出级别是info,这个的作用是为下面的logger默认了引用配置的appender-->
        <!--当additivity="true"时,在默认引用,additivity="false"时则不引用-->
        <root level="info">
            <appender-ref ref="stdout" />
        </root>
        <!--如下面 additivity="true时,则会上面配置的<appender-ref ref="stdout" />也会对我生效-->
       <logger name="com.asiainfo.checkstand.core" level="info" additivity="true">
           <!--配置引用哪个appender-->
            <appender-ref ref="file" />
        </logger>
        <logger name="org.springframework" level="info" additivity="false">
            <appender-ref ref="stdout" />
        </logger>
        <logger name="com.asiainfo.checkstand.core.dao" level="TRACE" additivity="true">
            <appender-ref ref="file" />
        </logger>
    
    </configuration>

    配置详解

    configuration节点相关属性

    属性名称默认值介绍
    debug false 要不要打印 logback内部日志信息,true则表示要打印。建议开启
    scan true 配置发送改变时,要不要重新加载
    scanPeriod 1 seconds 检测配置发生变化的时间间隔。如果没给出时间单位,默认时间单位是毫秒

    configuration子节点介绍

    1. contextName节点

    设置日志上下文名称,后面输出格式中可以通过定义 %contextName 来打印日志上下文名称

    2.property节点

    用来设置相关变量,通过key-value的方式配置,然后在后面的配置文件中通过 ${key}来访问

    3.appender 节点

    日志输出组件,主要负责日志的输出以及格式化日志。常用的属性有name和class

    属性名称默认值介绍
    name 无默认值 appender组件的名称,后面给logger指定appender使用
    class 无默认值 appender的具体实现类。常用的有 ConsoleAppender、FileAppender、RollingFileAppender

    ConsoleAppender:向控制台输出日志内容的组件,只要定义好encoder节点就可以使用。

    FileAppender:向文件输出日志内容的组件,用法也很简单,不过由于没有日志滚动策略,一般很少使用

    RollingFileAppender:向文件输出日志内容的组件,同时可以配置日志文件滚动策略,在日志达到一定条件后生成一个新的日志文件。

    appender节点中有一个子节点filter,配置具体的过滤器,比如上面的例子配置了一个内置的过滤器ThresholdFilter,然后设置了level的值为DEBUG。这样用这个appender输出日志的时候都会经过这个过滤器,日志级别低于DEBUG的都不会输出来。

    在RollingFileAppender中,可以配置相关的滚动策略,具体可以看配置样例的注释。

    4.logger以及root节点

    root节点和logger节点其实都是表示Logger组件。个人觉的可以把他们之间的关系可以理解为父子关系,root是最顶层的logger,正常情况getLogger("name/class")没有找到对应logger的情况下,都是使用root节点配置的logger。

    如果配置了logger,并且通过getLogger("name/class")获取到这个logger,输出日志的时候,就会使用这个logger配置的appender输出,同时还会使用rootLogger配置的appender。我们可以使用logger节点的additivity="false"属性来屏蔽rootLogger的appender。这样就可以不使用rootLogger的appender输出日志了。

    关于logger的获取,一般logger是配置name的。我们再代码中经常通过指定的CLass来获取Logger,比如这样LoggerFactory.getLogger(Test.class);,其实这个最后也是转成对应的包名+类名的字符串com.kongtrio.Test.class。假设有一个logger配置的那么是com.kongtrio,那么通过LoggerFactory.getLogger(Test.class)获取到的logger就是这个logger。

    也就是说,name可以配置包名,也可以配置自定义名称。

  • 相关阅读:
    POJ3480 John 博弈论 anti-nim anti-SG
    POJ2068 Nim 博弈论 dp
    POJ 1740 A New Stone Game 又是博弈论配对找规律orz 博弈论 规律
    Python复习之下划线的含义
    django 模板语法和三种返回方式
    Python自动化之一对多
    Python自动化之django的ORM
    Python自动化之django的ORM操作——Python源码
    django orm字段和参数
    Python自动化之django视图
  • 原文地址:https://www.cnblogs.com/cherishforchen/p/11396502.html
Copyright © 2011-2022 走看看