• LogBack


    Logback是由log4j创始人设计的又一个开源日志组件。
    Logback当前分成三个模块:logback-core,logback- classic和logback-access。
    logback-core是其它两个模块的基础模块。
    logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API。使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。
    logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能

     Logger:  日志的记录器,主要用于存放日志对象,也可以定义日志类型、级别。
    Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
    Layout:  负责把事件转换成字符串,格式化的日志信息的输出。
    在Logback中Layout对象被封装在encoder中。
    也就是说我们未来使用的encoder其实就是Layout

     日志输出格式:
        %-10level  级别 案例为设置10个字符,左对齐
        %d{yyyy-MM-dd HH:mm:ss.SSS} 日期
        %c  当前类全限定名
        %M  当前执行日志的方法
        %L  行号
        %thread 线程名称
        %m或者%msg    信息
        %n  换行

    logback.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <configuration>
    3. <!--
    4. 配置文件通用属性
    5. <property name="name" value=""></property>
    6. 所谓配置文件中的通用属性是为了让接下来的配置更加方便引用
    7. 通过以${name}的形式,方便的取得value值
    8. 通过取得的value值可以做文件的其他配置而使用
    9. -->
    10. <!--
    11. 我们在此可以先做日志输出格式相关的配置
    12. %-10level 级别 案例为设置10个字符,左对齐
    13. %d{yyyy-MM-dd HH:mm:ss.SSS} 日期
    14. %c 当前类全限定名
    15. %M 当前执行日志的方法
    16. %L 行号
    17. %thread 线程名称
    18. %m或者%msg 信息
    19. %n 换行
    20. 以property的形式将日志输出格式配置成为文件的通用的属性
    21. 那么下面我们配置的输出方式中,就可以重复的引用该配置(以下的配置,对于输出格式就不用配置多次了)
    22. -->
    23. <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"></property>
    24. <property name="pattern1" value="[%-5level]%d{yyyy-MM-dd HH:mm:ss.SSS}%c%M%L%thread%m%n"></property>
    25. <!-- 配置文件的输出路径 -->
    26. <property name="logDir" value="D://test"></property>
    27. <!-- 配置文件的appender 普通文件-->
    28. <appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
    29. <!-- 引入文件位置 -->
    30. <file>${logDir}/logback.log</file>
    31. <!-- 设置输出格式 -->
    32. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    33. <pattern>${pattern}</pattern>
    34. </encoder>
    35. </appender>
    36. <!-- 配置控制台appender -->
    37. <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
    38. <!--表示对于日志输出目标的配置
    39. 默认:System.out 表示以黑色字体输出日志
    40. 设置:System.err 表示以红色字体输出日志-->
    41. <target>
    42. System.err
    43. </target>
    44. <!--配置日志输出格式
    45. 手动配置格式的方式
    46. 直接引入上述的通用属性即可-->
    47. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    48. <!-- 格式引用通用属性配置 -->
    49. <pattern>${pattern}</pattern>
    50. </encoder>
    51. </appender>
    52. <!-- 配置文件的appender html文件 -->
    53. <appender name="htmlFileAppender" class="ch.qos.logback.core.FileAppender">
    54. <file>${logDir}/logback.html</file>
    55. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    56. <layout class="ch.qos.logback.classic.html.HTMLLayout">
    57. <pattern>${pattern1}</pattern>
    58. </layout>
    59. </encoder>
    60. </appender>
    61. <!-- 配置文件的appender 可拆分归档的文件 -->
    62. <appender name="roll" class="ch.qos.logback.core.rolling.RollingFileAppender">
    63. <!-- 输入格式 -->
    64. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    65. <pattern>${pattern}</pattern>
    66. </encoder>
    67. <!-- 引入文件位置 -->
    68. <file>${logDir}/roll_logback.log</file>
    69. <!-- 指定拆分规则 -->
    70. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    71. <!-- 按照时间和压缩格式声明文件名 压缩格式gz -->
    72. <fileNamePattern>${logDir}/roll.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
    73. <!-- 按照文件大小来进行拆分 -->
    74. <maxFileSize>1KB</maxFileSize>
    75. </rollingPolicy>
    76. </appender>
    77. <!-- 配置控制台的appender 使用过滤器 -->
    78. <appender name="consoleFilterAppender" class="ch.qos.logback.core.ConsoleAppender">
    79. <target>
    80. <!-- 用红色字体打印-->
    81. System.err
    82. </target>
    83. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    84. <pattern>${pattern}</pattern>
    85. </encoder>
    86. <!-- 配置过滤器 -->
    87. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    88. <!-- 设置日志的输出级别 -->
    89. <level>ERROR</level>
    90. <!-- 高于level中设置的级别,则打印日志 -->
    91. <onMatch>ACCEPT</onMatch>
    92. <!-- 低于level中设置的级别,则屏蔽日志 -->
    93. <onMismatch>DENY</onMismatch>
    94. </filter>
    95. </appender>
    96. <!-- 配置异步日志 -->
    97. <appender name="asyncAppender" class="ch.qos.logback.classic.AsyncAppender">
    98. <appender-ref ref="consoleAppender"/>
    99. </appender>
    100. <!--日志记录器
    101. 配置root logger
    102. level:配置日志级别
    103. 可以同时配置多个appender,做日志的多方向输出
    104. -->
    105. <root level="ALL">
    106. <!-- 引入appender -->
    107. <!-- 通过引入来启动上面的配置-->
    108. <!--<appender-ref ref="roll"/>-->
    109. <!--<appender-ref ref="consoleFilterAppender"/>-->
    110. <appender-ref ref="consoleAppender"/>
    111. <!--<appender-ref ref="asyncAppender"/>-->
    112. </root>
    113. <!--
    114. additivity="false"
    115. 表示不继承rootlogger
    116. -->
    117. <logger name="com.bjpowernode" level="info" additivity="false">
    118. <!-- 在自定义logger中配置appender -->
    119. <appender-ref ref="consoleAppender"/>
    120. </logger>
    121. </configuration>

    1. package com.log.logBack;
    2. import org.junit.Test;
    3. import org.slf4j.Logger;
    4. import org.slf4j.LoggerFactory;
    5. public class LogBackTest {
    6. @Test
    7. public void test01(){
    8. /*
    9. 入门案例
    10. logback有5种级别的日志输出
    11. 分别是
    12. trace < debug < info < warn < error
    13. 通过信息打印,默认的日志级别是debug,trace信息没有打印出来
    14. */
    15. /*----------------配置文件的输出路径-----------------------------
    16. 在实际的生产环境中,我们更希望将日志信息保留在文件中
    17. 在文件中,默认是以追加日志的形式做记录
    18. <!-- 配置文件的输出路径 -->
    19. <property name="logDir" value="D://test"></property>
    20. <file>${logDir}/logback.log</file>
    21. */
    22. /*----------------将日志输出成为一个html文件-----------------------------
    23. 将日志输出成为一个html文件
    24. 这个html文件是由logback来帮我们控制样式以及输出的格式
    25. 内容由我们自己来指定
    26. 初始测试:样式不是很好看
    27. 在实际生产环境中,如果日志不是很多,建议使用html的方式去进行日志的记录
    28. <!-- 配置文件的appender html文件 -->
    29. <appender name="htmlFileAppender" class="ch.qos.logback.core.FileAppender">
    30. <file>${logDir}/logback.html</file>
    31. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    32. <layout class="ch.qos.logback.classic.html.HTMLLayout">
    33. <pattern>${pattern1}</pattern>
    34. </layout>
    35. </encoder>
    36. </appender>
    37. */
    38. /*----------------日志拆分和归档压缩-----------------------------
    39. <!-- 配置文件的appender 可拆分归档的文件 -->
    40. <appender name="roll" class="ch.qos.logback.core.rolling.RollingFileAppender">
    41. <!-- 输入格式 -->
    42. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    43. <pattern>${pattern}</pattern>
    44. </encoder>
    45. <!-- 引入文件位置 -->
    46. <file>${logDir}/roll_logback.log</file>
    47. <!-- 指定拆分规则 -->
    48. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    49. <!-- 按照时间和压缩格式声明文件名 压缩格式gz -->
    50. <fileNamePattern>${logDir}/roll.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
    51. <!-- 按照文件大小来进行拆分 -->
    52. <maxFileSize>1KB</maxFileSize>
    53. </rollingPolicy>
    54. </appender>
    55. */
    56. /*----------------在appender中添加过滤器-----------------------------
    57. 在appender中添加过滤器
    58. 以此对日志进行更细粒度的打印
    59. <!-- 配置控制台的appender 使用过滤器 -->
    60. <appender name="consoleFilterAppender" class="ch.qos.logback.core.ConsoleAppender">
    61. <target>
    62. <!-- 用红色字体打印-->
    63. System.err
    64. </target>
    65. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    66. <pattern>${pattern}</pattern>
    67. </encoder>
    68. <!-- 配置过滤器 filter-->
    69. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    70. <!-- 设置日志的输出级别 打印ERROR级别高的日志,包括ERROR-->
    71. <level>ERROR</level>
    72. <!-- 高于level中设置的级别,则打印日志 -->
    73. <onMatch>ACCEPT</onMatch>
    74. <!-- 低于level中设置的级别,则屏蔽日志 -->
    75. <onMismatch>DENY</onMismatch>
    76. </filter>
    77. </appender>
    78. */
    79. /*----------------自定义logger-----------------------------
    80. 自定义logger
    81. <!--
    82. additivity="false"
    83. 表示不继承rootlogger
    84. name 有父子级别
    85. level="info" 输出 info 级别及其以上的log
    86. -->
    87. <logger name="com.log" level="info" additivity="false">
    88. <!-- 在自定义logger中配置appender -->
    89. <appender-ref ref="consoleAppender"/>
    90. </logger>
    91. */
    92. Logger logger = LoggerFactory.getLogger(LogBackTest.class);
    93. logger.error("error信息");
    94. logger.warn("warn信息");
    95. logger.info("info信息");
    96. logger.debug("debug信息");
    97. logger.trace("trace信息");
    98. }
    99. @Test
    100. public void test02(){
    101. /*----------------异步日志的功能-----------------------------
    102. 按照我们当前的代码执行顺序
    103. 代码肯定是按照从上向下的顺序执行
    104. 上面的代码完全执行完毕后,才会执行下面的代码
    105. 由此得出会出现的问题:
    106. 只要是在记录日志,那么系统本身的功能就处于一种停滞的状态
    107. 当日志记录完毕后,才会执行其他的代码
    108. 如果日志记录量非常庞大的话,那么我们对于系统本身业务代码的执行效率会非常低
    109. 所以logback为我们提供了异步日志的功能
    110. 配置方式:
    111. 1.配置异步日志
    112. 在异步日志中引入我们真正需要输出的appender
    113. <appender name="asyncAppender" class="ch.qos.logback.classic.AsyncAppender">
    114. <appender-ref ref="consoleAppender"/>
    115. </appender>
    116. 2.在rootlogger下引入异步日志
    117. <appender-ref ref="asyncAppender"/>
    118. 所谓异步日志的原理是:
    119. 系统会为日志操作单独的分配出来一根线程,主线程会继续向下执行
    120. 线程1:系统业务代码执行
    121. 线程2:打印日志
    122. 两根线程争夺CPU的使用权
    123. 在实际项目开发中,越大的项目对于日志的记录就越庞大
    124. 为了保证项目的执行效率,异步日志是一个很好的选择
    125. */
    126. Logger logger = LoggerFactory.getLogger(LogBackTest.class);
    127. //日志打印操作
    128. for (int i = 0; i < 100; i++) {
    129. logger.error("error信息");
    130. logger.warn("warn信息");
    131. logger.info("info信息");
    132. logger.debug("debug信息");
    133. logger.trace("trace信息");
    134. }
    135. //系统本身业务相关的其他操作
    136. System.out.println("1----------------------");
    137. System.out.println("2----------------------");
    138. System.out.println("3----------------------");
    139. System.out.println("4----------------------");
    140. System.out.println("5----------------------");
    141. /* 关于logback补充:
    142. 1.异步日志:
    143. 可配置属性
    144. 配置了一个阈值
    145. 当队列的剩余容量小于这个阈值的时候,当前日志的级别 trace、debug、info这3个级别的日志将被丢弃
    146. 设置为0,说明永远都不会丢弃trace、debug、info这3个级别的日志
    147. <discardingThreshold>0</discardingThreshold>
    148. 配置队列的深度,这个值会影响记录日志的性能,默认值就是256
    149. <queueSize>256</queueSize>
    150. 关于这两个属性,一般情况下,我们使用默认值即可
    151. 不要乱配置,会影响系统性能,了解其功能即可
    152. 2.关于不同的日志实现,配置文件也是不同的
    153. 例如:
    154. log4j经常使用的是properties属性文件
    155. logback使用的是xml配置文件
    156. 如果我们遇到了一种情况,就是需要将以前的log4j,改造为使用logback
    157. 应该如何处理
    158. 我们可以使用工具(如果是遇到简单的配置,我们可以使用工具)
    159. 访问logback官网
    160. 找到log4j.properties转换器
    161. 只要是二者兼容的技术,才会被翻译
    162. 如果是log4j独立的技术,logback没有,或者是有这个技术但是并不兼容转义
    163. 那么这个工具则不会为我们进行翻译
    164. */
    165. }
    166. }

  • 相关阅读:
    树型结构和二叉树的概念及特性
    虹科分享 | 担心数据泄露?2023 年数据安全防御的 6 个关键策略
    Git标签管理:从创建到推送的完整指南
    2024 泛娱乐企业出海音视频选型攻略
    SSH登陆无权限
    升级MacOS(Mojave)后使用git问题
    17 HAP 覆盖特性与链路损耗特性分析
    使用Selenium和Java编写爬虫程序
    九、Sentinel熔断与限流
    基于SSH开发酒店管理系统
  • 原文地址:https://blog.csdn.net/weixin_45729272/article/details/125550212