zoukankan      html  css  js  c++  java
  • 04.日志管理

    日志管理

    springboot默认日志框架是Logback,并用INFO级别输出到控制台
    级别分别是TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF

    如:
    • root日志配置
      logging.level.root=error
    • org.springframework.web日志配置
      logging.level.org.springframework.web=debug
    • hibernate日志配置
      logging.level.org.hibernate=debug
    配置日志输出文件logging.file或logging.path属性
    • logging.file,设置文件,绝对路径或相对路径
      如logging.file=log/info.log 就是项目下的log/info.log文件
    • logging.path,设置目录,会在该目录下创建spring.log文件,并写入log
      不能同时使用,若都配置logging.file生效,默认情况下,日志文件的大小达到10MB会切分一次,产生新的日志文件
      ,默认级别为ERROR,WARN,INFO
    logging.level.root=warn
    logging.level.org.springframework.web=debug
    logging.file=log/info.log
    logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} %magenta([%thread]) %clr(%-5level) %logger- %msg%n
    logging.pattern.file=%d{yyyy/MM/dd-HH:mm:ss} %magenta([%thread]) %clr(%-5level) %logger- %msg%n
    
    • %d{yyyy/MM/dd-HH:mm:ss} %clr(%-5level) [%magenta(%-15thread)] %cyan(%logger{60}(%line)): %msg%n
    • %d:日期,大括号里面为日期的显示格式;
    • %clr(): 根据内容显示不同颜色的的方法,一般是给“日志级别”这个信息使用的;
    • %level:日志级别,百分号和关键字中间的短杠和数字(-5)表示显示这么多个字符的宽度,内容不足则补充空格占位;
    • %magenta():将内容显示为品红色字体
    • %-5level——日志级别,并且使用5个字符靠左对齐
    • %thread:线程名;
    • %cyan:将内容显示为青色字体;
    • %logger:事件发生的位置的所在类的全类名;
    • %line:事件发生的位置的行号;
    • %msg:事件信息;
    • %n:换行,输出跨操作系统的换行符号;

    自定义日志配置文件

    Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项
    创建logback-spring.xml并放置到resource目录下
    若起其它名字,如conf,可配置:

    logging.config=classpath:conf.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    
        <!--property用于配置变量,可通过${LOG_PATH} 取对应的值-->
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <property name="LOG_PATH" value="log"/>
        <property name="PATTERN"
                  value="%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n"/>
        <property name="CONSOLE_LOG_PATTERN"
                  value="%date{yyyy-MM-dd HH:mm:ss} | %highlight(%5p) | %green(%thread) | %boldMagenta(%logger) | %cyan(%msg%n)"/>
    
        <!--设置上下文名称-->
        <!-- 可以通过%contextName来打印日志上下文名称,随便起,一般来说我们不用这个属性,可有可无-->
        <contextName>logback</contextName>
    
        <!--输出到控制台,一个appender定义一种输出策略,可以定义多个-->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <!--filter中定义要输出的日志级别,例如:输出info级别以上的日志,默认是info-->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>info</level>
            </filter>
            <!--日志输出编码格式化-->
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
    
        <!-- 输出到文件info,日期滚动记录 -->
        <appender name="logInfoFile"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--<Prudent>true</Prudent>-->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!--过滤 其他只留info-->
                <level>info</level>
                <!--匹配到就禁止-->
                <onMatch>ACCEPT</onMatch>
                <!--没有匹配到就允许-->
                <onMismatch>DENY</onMismatch>
            </filter>
            <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy 每天会生成一个日志文件-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--文件路径,定义了日志的切分方式,以防止日志填满整个磁盘空间-->
                <fileNamePattern>
                    ${LOG_PATH}/info/iot-info-%d{yyyy-MM-dd}.log
                </fileNamePattern>
                <!--只保留最近90天的日志-->
                <maxHistory>90</maxHistory>
                <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
                <!--<totalSizeCap>1GB</totalSizeCap>-->
            </rollingPolicy>
    
            <append>true</append>
    
            <!--日志输出编码格式化-->
            <encoder>
                <charset>GBK</charset>
                <pattern>${PATTERN}</pattern>
            </encoder>
        </appender>
    
        <!--把上边的两种输出策略添加到跟节点,名称要保证和上边一致,否则报错 ,并指明输出级别为INFO-->
        <root level="info">
            <appender-ref ref="console"/>
            <appender-ref ref="logInfoFile"/>
        </root>
    
        <!--可选节点,用来具体指明包的日志输出级别  如果不设置,则会交个root配置的appender处理-->
        <!--将该包下的日志交给console的appender处理,additivity设为false表示不再向上传递,如果置为true,则root接到后会再打印一次。 -->
         <logger name="com.fly" level="INFO" additivity="false">
            <appender-ref ref="console"/>
        </logger>
    </configuration>
    

    logger的使用

        import org.slf4j.Logger;
        import org.slf4j.LoggerFactory;
        private Logger logger = LoggerFactory.getLogger(this.getClass());
        logger.debug("=============debug日志=============");
        logger.info("=============info日志=============");
        logger.warn("=============warn日志=============");
        logger.error("=============error日志=============");
    
    logback-spring.xml配置
    <!--可选节点,用来具体指明包的日志输出级别  如果不设置,则会交个root配置的appender处理-->
    <!--将该包下的日志交给console的appender处理,additivity设为false表示不再向上传递,如果置为true,则root接到后会再打印一次。 -->
    <logger name="com.fly" level="INFO" additivity="false">
        <!--输出策略-->
        <appender-ref ref="console"/>
    </logger>
    

    多环境日志输出

    在logback-spring.xml配置springProfile节点定义如prod生产环境,test测试环境,dev开发环境的日志输出

       <!--多个环境使用逗号隔开-->
        <springProfile name="test,dev">
            <logger name="com.fly" level="INFO"/>
        </springProfile>
        <springProfile name="prod">
            <logger name="com.fly" level="ERROR"/>
        </springProfile>
    

    application.properties配置环境

    spring.profiles.active=dev
    

    使用log4j进行日志管理

     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j</artifactId>
        <version>1.3.8.RELEASE</version>
    </dependency>
    

    resources下建立log4j.properties

    log4j.rootLogger=info,CONSOLE,DEBUG
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] =%m%n
    log4j.logger.info=info
    log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.info.layout=org.apache.log4j.PatternLayout
    log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] =%m%n
    log4j.appender.info.datePattern='.'yyyy-MM-dd
    log4j.appender.info.Threshold=info
    log4j.appender.info.append=true
    log4j.appender.info.File=/log/info/log4j.log
    log4j.logger.DEBUG=DEBUG
    log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout
    log4j.appender.DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] =%m%n
    log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd
    log4j.appender.DEBUG.Threshold=DEBUG
    log4j.appender.DEBUG.append=true
    log4j.appender.DEBUG.File=/log/debug/log4j.log
    
    import org.apache.log4j.Logger;
    private Logger logger = Logger.getLogger(this.getClass());
    logger.debug("=============debug日志=============");
    logger.info("=============info日志=============");
    logger.warn("=============warn日志=============");
    logger.error("=============error日志=============");
    
  • 相关阅读:
    腾讯的张小龙是一个怎样的人?
    wordpress 推荐几个主题
    heidisql 可以查看sql
    phpmyadmin 连接外部数据库
    两个效果不错胡时间轴网站
    phpstorm与Mint 快捷键冲突
    Android Action
    Tomcat server.xml
    awk
    makefile
  • 原文地址:https://www.cnblogs.com/fly-book/p/11563032.html
Copyright © 2011-2022 走看看