zoukankan      html  css  js  c++  java
  • logback(日志框架)私人学习笔记

    俗话说“好记性不如烂笔头”,编程的海洋如此的浩大,养成做笔记的习惯是成功的一步!

    此笔记主要是logback-1.2.3版本的笔记,并且笔记都是博主自己一字一字编写和记录,有错误的地方欢迎大家指正。






    1、logback是由log4j创始人Ceki Gülcü设计的又一个开源日志组件,比log4j功能更强大,效率更高。将逐步取代log4j框架。
      logback-1.2.3是目前最新的版本,本笔记都基于此版本。
      官方网址:https://logback.qos.ch/
      使用手册:https://logback.qos.ch/manual/index.html


    2、logback当前分成三个模块:
    logback-core:是其他两个模块的基础模块,提供基础支持。
    logback-classic:是log4j的改良版本,并且实现了sl4j的api,可以更方便的更换成其他日志框架。
    logback-access:与servlet容器集成可通过http协议来访问日志的功能。


    3、Logback的核心对象:Logger、Appender、Layout。
    Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
    Logger对象一般多定义为静态常量。
     
    Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、 PostreSQL、Oracle
    和其他数据库、 JMS和远程UNIX Syslog守护进程等。
     
    Layout:负责把事件转换成字符串,格式化的日志信息的输出。具体的Layout通配符,可以直接查看帮助文档。




    4、默认情况下,logback框架默认会寻找logback.xml配置文件,如果不存在,则使用默认的配置,将日志打印到console控制台中。



    5、logback依赖与slf4j框架,需要引入slf4j.jar包,如果项目或其他框架有使用log4j框架,则可以引入log4j-over-slf4j.jar
      来代替log4j.jar,从而最终统一由logback框架来管理日志。
      
      
      
    6、logback日志输出的布局形式是可以定制的,可以自己继承ch.qos.logback.core.LayoutBase类来定制自己的日志输出格式,
      也可以直接使用框架现有的布局实现类,例如XMLLayout、HTMLLayout和PatternLayout等,通常使用PatternLayout就可以满足
      大部分的输出要求。布局的使用可以参考文档地址:https://logback.qos.ch/manual/layouts.html#PatternLayout 
      
      
    7、详细的logback.xml配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒当scan为true时,此属性生效。默认的时间间隔为1分钟。 
    debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
    <configuration debug="true" scan="true" scanperiod="1800 seconds">
    <!-- 定义属性,类似于maven,可以当做变量被引用 -->
    <property name="LOG_HOME" value="F:/log" />
    <property name="APP_NAME" value="backlog-demo" />


    <!-- 这里关闭谨慎模式,如果开启谨慎模式,借助排它文件锁,可以使多个JVM中运行的 多个FileAppender实例,
              安全的写入到同一个日志文件,但日志吞吐率非常低,大概是正常日志输出的1/3左右。 -->
    <prudent>false</prudent>


    <!-- 定制自己的转换器。默认PatternLayout布局中支持使用。 -->
    <conversionRule conversionWord="myCon"
    converterClass="cn.cat.converter.MyConverter" />


    <!-- 输出到控制台 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    <Encoding>UTF-8</Encoding>
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    <!-- 使用自定义的布局。可以不用encoder标签来包含,直接写layout标签。 -->
    <layout class="cn.cat.layout.MyLayout">
    <!-- 配置remark属性值的内容,通过set方法自动注入到MyLayout中 -->
    <remark>备注内容</remark>
    </layout>
    </encoder>
    </appender>


    <!-- 输出到文件,并按日切分文件 -->
    <appender name="dayFile"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <Encoding>UTF-8</Encoding>
    <!-- 当前输出的文件路径和名称。路径不存在会自动创建。 -->
    <file>${LOG_HOME}/${APP_NAME}.log</file>
    <!-- 设置是否马上将日志输出到文件,建议设置为false,等缓存到一定数据量后才写入文件,这样效率更高。 -->
    <immediateFlush>true</immediateFlush>
    <!-- 是否对日志文件进行追加。默认为true。 -->
    <append>true</append>
    <!-- 基于时间的滚动 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!-- 保存历史文件路径和名称。路径不存在会自动创建。此文件名的命名方式很重要, 
        TimeBasedRollingPolicy就是根据定义的文件名规则,来推断出文件滚动的策略, 
     例如下面包含%d{yyyy-MM-dd}.log 则表示使用按日滚动文件,
    %d{yyyy-ww}.log 则表示每周的第一天滚动。
    %d{yyyy-MM-dd_HH}.log 则表示每小时滚动。
    %d{yyyy-MM-dd_mm}.log 则表示每分钟滚动。
    %d{yyyy/MM}/${APP_NAME}.log 则表示按月滚动。
    特殊的,如果想每个月保留最后5个文件,可以使用此文件名规则:
    ${LOG_HOME}/%d{yyyy/MM, aux}/${APP_NAME}-%d{yyyy-MM-dd}.log
    -->
    <fileNamePattern>${LOG_HOME}/${APP_NAME}-%d{yyyy-MM-dd}.log
    </fileNamePattern>
    <!-- 保留文件的数量。当超过保留文件后,会删除之前的旧文件。 -->
    <MaxHistory>10</MaxHistory>
    <!-- 总文件的大小,如果总文件大小超过3GB,即使文件没有达到10个,也会执行清除。 -->
    <totalSizeCap>3GB</totalSizeCap>
    </rollingPolicy>

    <!-- 设置过滤器。过滤日志的最低输出级别,必须INFO以上的级别才输出到此输出器中。 -->
             <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
                <level>INFO</level>  
            </filter>
            
    <!-- 当layout使用PatternLayout布局时,可以使用<encoder><pattern></pattern></encoder>来简写代替 -->
    <layout class="ch.qos.logback.classic.PatternLayout">
    <!-- %-5 表示最小为5个字符,不足则在右边用空格填充。%logger{50}表示日志输出记录的名称类最长为50个字符 -->
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%myCon- %msg%n</pattern>
    </layout>
    </appender>
        
        <!-- 输出到文件,根据大小和时间来切分,适合每日输出日志非常大的场景 -->
        <appender name="daySizeFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <file>${LOG_HOME}/${APP_NAME}-info.log</file>
       <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
         <!-- 按日滚动,注意%i是必须的,表示文件的索引号,从0开始累加 -->
         <fileNamePattern>${LOG_HOME}/${APP_NAME}-%d{yyyy-MM-dd}.%i-info.log</fileNamePattern>
          <!-- 每个文件最大为100MB,最多保存60个文件数量,并且所有文件总和不能大于20GB。 -->
          <maxFileSize>100MB</maxFileSize>    
          <maxHistory>60</maxHistory>
          <totalSizeCap>20GB</totalSizeCap>
       </rollingPolicy>
            
            <!-- 设置过滤器。仅仅输出INFO级别的日志,其余级别的一律不输出。 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">  
       <level>INFO</level>
       <!-- 如果匹配,则ACCEPT,即接收 -->
       <onMatch>ACCEPT</onMatch> 
       <!-- 如果不匹配,则DENY,即拒绝 --> 
       <onMismatch>DENY</onMismatch>  
    </filter>  

       <encoder>
        <!-- 配置日志输出模板  -->
         <pattern>%msg%n</pattern>
       </encoder>
        </appender>
        
        <!-- 输出到邮箱。将日志内容直接通过邮件发送。默认日志级别为ERROR,一个ERROR输出为一封邮件。注意需要引入mail.jar包 -->
        <appender name="email" class="ch.qos.logback.classic.net.SMTPAppender">
            <!-- 设置邮件发送者的邮箱信息 -->
       <smtpHost>smtp.126.com</smtpHost>
       <smtpPort>25</smtpPort>
       <username>
    xxx@126.com</username>
            <password>xxxxx</password>
            <!-- 邮件发送者 -->        
       <from>
    xxx@126.com</from>
       <!-- 邮件接收者 -->
       <to>
    xxx@qq.com</to>
       <!-- 邮件主题 -->
       <subject>%logger{20} - %m</subject>
       <!-- 是否异步发送。默认为true。如果为true,则使用线程池的线程来异步发送邮件。 -->
       <asynchronousSending>false</asynchronousSending>
       <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
    </appender>
     
     
    <!-- 指定某个包下的日志输出配置。
      additivity=true表示继续可以使用root标签指定的日志级别和输出器。
          日志输出级别为debug,会覆盖root标签设置的级别,以此级别为标准。 -->
    <logger name="cn.cat" additivity="true" level="debug">
      <!-- 额外增加指定输出。如果此处指定dayFile输出器,并且additivity="true", 
                 同时root标签下又指定dayFile输出器,则会导致日志重复输出的情况 -->
      <appender-ref ref="dayFile" />
    </logger>  
     
        


    <!-- 配置根节点。指定日志的默认基本和输出方向。 -->
    <root level="info">
    <appender-ref ref="stdout" />
    <appender-ref ref="dayFile" />
    <appender-ref ref="daySizeFile" />
    <!-- <appender-ref ref="email" /> -->
    </root>
    </configuration>


       

  • 相关阅读:
    信号、事件与状态
    信号处理机制的范式分析
    三寒两倒七分饱
    血热的人吃什么好
    消息、信息与信号的区别
    Busy waiting
    事件的处理机制:单播、广播、链式路由、职责链。
    事件处理:pull与push
    响应式编程
    类、组件、人机交互
  • 原文地址:https://www.cnblogs.com/catgwj/p/7604868.html
Copyright © 2011-2022 走看看