最流行的日志框架解决方案

按笔者理解,现在最流的日志框架解决方案莫过于SLF4J + LogBack。其有以下几个优点:

  • LogBack 自身实现了 SLF4J 的日志接口,不需要 SLF4J 去做进一步的适配。
  • LogBack 自身是在 Log4J 的基础上优化而成的,其运行速度和效率都比 LOG4J 高。
  • SLF4J + LogBack 支持占位符,方便日志代码的阅读,而 LOG4J 则不支持。

从上面几点来看,SLF4J + LogBack是一个较好的选择。

LogBack 被分为3个组件:logback-core、logback-classic 和 logback-access。

  • logback-core 提供了 LogBack 的核心功能,是另外两个组件的基础。
  • logback-classic 则实现了 SLF4J 的API,所以当想配合 SLF4J 使用时,需要将 logback-classic 引入依赖中。
  • logback-access 是为了集成Servlet环境而准备的,可提供HTTP-access的日志接口。

了解 LogBack 日志的日志流向,对于我们后面学习日志框架的配置很有帮助。从下图可以看出 LogBack 的日志记录数据流是从 Class 或 Package 流到 Logger,再从Logger到Appender,最后从Appender到具体的输出终端。

LogBack配置文件可以分为几个节点,其中 Configuration 是根节点,Appender、Logger、Root是Configuration的子节点。

appender节点

<appender>是<configuration>的子节点,是负责写日志的组件。appender有两个必要属性name、class 。name指定appender的名称,class指定appender的全限定名
class,主要包括:

  • ch.qos.logback.core.ConsoleAppender 控制台输出
  • ch.qos.logback.core.FileAppender 文件输出
  • ch.qos.logback.core.RollingFileAppender 文件滚动输出
<?xml version="1.0" encoding="utf-8"?> <configuration debug="true" scan="true" scanPeriod="2"> <!-- conf consoel out --> <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender"> </appender> <!-- conf file out --> <appender name="file_out" class="ch.qos.logback.core.FileAppender"> </appender> <!-- conf file out --> <appender name="file_out" class="ch.qos.logback.core.RollingFileAppender"> </appender> <root></root> <logger></logger> </configuration>

ConsoleAppender

把日志添加到控制台,有如下节点:

  • <encoder> : 对日志进行格式化。
  • <target> : 字符串System.out 或者 System.err, 默认 System.out;
<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- conf consoel out --> <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%date [%thread] %-5level %logger - %message%newline</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="console_out" /> </root> </configuration>

FileAppender

把日志添加到文件,有如下节点:

  • <file>:被写入的文件名,可以是相对目录 , 也可以是绝对目录 , 如果目录不存在则会自动创建。
  • <append>:如果是true , 日志被追加到文件结尾 , 如果是false,清空现存文件 , 默认是true。
  • <encoder>:对日志进行格式化 [具体的转换符说明请参见官网.]
<?xml version="1.0" encoding="utf-8"?> <configuration> <appender name="file_out" class="ch.qos.logback.core.FileAppender"> <file>logs/debug.log</file> <encoder> <pattern>%date [%thread] %-5level %logger - %message%newline</pattern> </encoder> </appender> </configuration>

rollingFileAppender

滚动纪录文件,先将日志记录到指定文件,当符合某种条件时,将日志记录到其他文件,有如下节点:

  • <file>:被写入的文件名,可以是相对目录,也可以解决目录,如果目录不存在则自动创建。
  • <append>:如果是true,日志被追加到文件结尾,如果是false,清空现存文件,默认是true。
  • <encoder>:对日志进行格式化。
  • <rollingPolicy>:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。

rollingPolicy

  • TimeBaseRollingPolicy :最常用的滚动策略,根据时间来制定滚动策略,即负责滚动也负责触发滚动。有如下节点;

    • <fileNamePattern>:必要节点,包含文件及“%d” 转换符,“%d”可以包含一个java.text.SimpleDateFormat 制定的时间格式,如:%d{yyyy-MM},如果直接使用%d ,默认格式是 yyyy-MM-dd。
    • <maxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,且<maxHistory> 是 6,则只保存最近6个月的文件,删除之前的旧文件,注意:删除旧文件是哪些为了归档而创建的目录也会被删除。
    • <filenamePattern>:必须包含“%i” 例如:设置最小值,和最大值分别为1和2,命名模式为 log%i.log,会产生归档文件log1.log和log2.log,还可以指定文件压缩选项,例如:log%i.log.gz 或者 log%i.log.zip
  • triggeringPolicy:告知RollingFileAppender,激活RollingFileAppender滚动。
<!-- 03:conf errorAppender out -->
<appender name="errorAppender" class="ch.qos.logback.core.RollingFileAppender"> <file>logs/error.log</file> <!-- 设置滚动策略 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--设置日志命名模式--> <fileNamePattern>errorFile.%d{yyyy-MM-dd}.log</fileNamePattern> <!--最多保留30天log--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 超过150MB时,触发滚动策略 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>150</maxFileSize> </triggeringPolicy> <encoder> <pattern>%d [%p] %-5level %logger - %msg%newline</pattern> </encoder> </appender>

logger节点

logger是<configuration>的子节点,来设置某一个包或者具体的某一个类的日志打印级别,以及指定<appender>。logger仅有一个name属性,两个可选属性 level/addtivity。

  • name:用来指定受此loger约束的某一个包或者具体的某一个类。
  • level:用来设置打印级别,大小写无关。可选值有TRACE、DEBUG、INFO、WARN、ERROR、ALL和OFF。还有一个特俗值INHERITED 或者 同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。
  • addtivity:是否向上级logger传递打印信息,默认为true;

<logger>可以包含零个或多个<appender-ref>元素,表示这个appender将会添加到logger。

<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- conf consoel out --> <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤掉非INFO级别 --> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- conf infoAppender out --> <appender name="infoAppender" class="ch.qos.logback.core.RollingFileAppender"> <file>logs/info.log</file> <!-- 设置滚动策略 --> <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--设置日志命名模式--> <fileNamePattern>infoFile.%d{yyyy-MM-dd}.log</fileNamePattern> <!--最多保留30天log--> <maxHistory>30</maxHistory> </rollingPoliy> <!-- 超过150MB时,触发滚动策略 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>150</maxFileSize> </triggeringPolicy> <encoder> <pattern>%d [%p] %-5level %logger - %msg%newline</pattern> </encoder> </appender> <!-- 添加两个appender节点 --> <logger name="logback.olf.log" level="info"> <appender-ref ref = "console_out"/> <appender-ref ref = "infoAppender"/> </logger> </configuration>

root节点

元素配置根logger。该元素有一个level属性,没有name属性,因为已经被命名 为root。Level属性的值大小写无关,其值为下面其中一个字符串:TRACE、DEBUG、INFO、 WARN、ERROR、ALL 和 OFF。如果 root 元素没 有引用任何 appender,就会失去所有 appender。

<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- conf consoel out --> <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤掉非INFO级别 --> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 01:conf infoAppender out --> <appender name="infoAppender" class="ch.qos.logback.core.RollingFileAppender"> <file>logs/info.log</file> <!-- 设置滚动策略 --> <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--设置日志命名模式--> <fileNamePattern>infoFile.%d{yyyy-MM-dd}.log</fileNamePattern> <!--最多保留30天log--> <maxHistory>30</maxHistory> </rollingPoliy> <!-- 超过150MB时,触发滚动策略 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>150</maxFileSize> </triggeringPolicy> <encoder> <pattern>%d [%p] %-5level %logger - %msg%newline</pattern> </encoder> </appender> <!-- 02:conf debugAppender out --> <appender name="debugAppender" class="ch.qos.logback.core.RollingFileAppender"> <file>logs/debug.log</file> <!-- 设置滚动策略 --> <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--设置日志命名模式--> <fileNamePattern>debugFile.%d{yyyy-MM-dd}.log</fileNamePattern> <!--最多保留30天log--> <maxHistory>30</maxHistory> </rollingPoliy> <!-- 超过150MB时,触发滚动策略 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>150</maxFileSize> </triggeringPolicy> <encoder> <pattern>%d [%p] %-5level %logger - %msg%newline</pattern> </encoder> </appender> <!-- 03:conf errorAppender out --> <appender name="errorAppender" class="ch.qos.logback.core.RollingFileAppender"> <file>logs/error.log</file> <!-- 设置滚动策略 --> <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--设置日志命名模式--> <fileNamePattern>errorFile.%d{yyyy-MM-dd}.log</fileNamePattern> <!--最多保留30天log--> <maxHistory>30</maxHistory> </rollingPoliy> <!-- 超过150MB时,触发滚动策略 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>150</maxFileSize> </triggeringPolicy> <encoder> <pattern>%d [%p] %-5level %logger - %msg%newline</pattern> </encoder> </appender>

转载于:https://www.cnblogs.com/ifindu-san/p/9716821.html

Java日志框架(二)相关推荐

  1. java日志框架JUL、JCL、Slf4j、Log4j、Log4j2、Logback 一网打尽

    为什么程序需要记录日志 我们不可能实时的24小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系统 ...

  2. Java日志框架 -- 日志框架介绍、日志门面技术、JUL日志(JUL架构、JUL入门示例、JUL日志级别、JUL日志的配置文件)

    1. 日志的概念 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统的活动等重要作用. 2. Java日志框架 问题: 控制日志输出的内容 ...

  3. Java日志框架简介

    一.java日志发展线路图 上面涵盖了java世界里主要的日志框架或门面,注意,jcl和slf4j是日志门面,因此,在slf4j之前的日志框架,要使用桥接模式来适应slf4j的通用接口,达到统一接口调 ...

  4. 学习Java日志框架之——搞懂日志门面(JCL+SLF4J)

    文章目录 系列文章目录 一.什么是日志门面 1.门面模式(外观模式) 2.日志门面 二.了解JCL 1.JCL组件结构 2.JCL案例 (1)JCL默认实现 (2)导入log4j测试原有程序 三.SL ...

  5. 学习Java日志框架之——搞懂JUL(java.util.logging)

    文章目录 系列文章目录 一.JUL简介 二.JUL组件介绍 三.代码实例 1.入门案例 2.日志级别 (1)默认日志级别源码分析 3.自定义日志级别 4.将日志输出到文件中 5.Logger的父子关系 ...

  6. Java日志框架日志门面介绍

    文章目录 一.日志 二.常见日志框架 历史 各大框架介绍 JUL Log4j(1999-2015) Logback(2006-?) Log4j2 Logback与Log4j2对比 三.日志门面 什么是 ...

  7. java日志框架简介(日志框架选型)

    目录 日志框架发展历程 实现框架 log4j1 JUL logback log4j2 门面日志 SLF4J JCL Spring-JCL Jboss-logging 日志框架选型 日志框架发展历程 现 ...

  8. 多种java 日志框架【超详细图文】

    一.目标 日志的作用和目的 日志的框架 JUL的使用 LOG4J的使用 JCL的使用 二.日志的概念 2.1 日志文件 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志.具有处理历史 ...

  9. 获取日志的等级_进阶之路:Java 日志框架全画传(中)

    导读:随着互联网和大数据的蓬勃发展,分布式日志系统以及日志分析系统得到了广泛地应用.目前,几乎在所有应用程序中,都会用到各种各样的日志框架来记录程序的运行信息.鉴于此,工程师十分有必要熟悉主流的日志记 ...

  10. java log4j logback jcl_进阶之路:Java 日志框架全画传(下)

    导读:随着互联网和大数据的蓬勃发展,分布式日志系统以及日志分析系统得到了广泛地应用.目前,几乎在所有应用程序中,都会用到各种各样的日志框架来记录程序的运行信息.鉴于此,工程师十分有必要熟悉主流的日志记 ...

最新文章

  1. JSONObject和JSONArray(json-lib-2.4)的基本用法
  2. log4net按照不同的【LEVEL】级别输出到不同文件
  3. MPLS由何而来?—Vecloud微云
  4. 解决在配置Oracle数据库连接错误问题
  5. JavaScript中为何要使用prototype
  6. [20161128]关于Little Enddian.txt
  7. 【maven】No plugin found for prefix ‘install‘ in the current project
  8. Matcha已升级至0xV4版,比Uniswap和Sushi等平台节省4%的交易费
  9. python递归函数介绍
  10. php.ini添加的变量读取,php用ini_get获取php.ini里变量值的方法
  11. 办理美国商务和旅游签证(B1 B2)和面签的奥秘
  12. 电感电容之开关电源的原理
  13. Java集成Outlook邮件操作
  14. 【暴强】200种好口碑便宜护肤品 - 健康程序员,至尚生活!
  15. VS2010编译静态链接MFC的OCX遇到的问题:nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 LIBCMTD.lib(dllm
  16. Win32窗口程序实例
  17. Golang 中 map 探究
  18. html 图片缩小后模糊,css图片缩放失真出现锯齿的如何解决呢?
  19. 51信用卡孙海涛:信用卡账单背后的大数据 | 万物互联创新大会
  20. 测控计算机三级有用吗,测控专业与计算机三级

热门文章

  1. 【Tensorflow】图像的读取、解码、显示、处理、编码、保存
  2. 区块链 性能测试工具
  3. 区块链 Fisco bcos 智能合约(12)-Solidity的高级特性
  4. FISCO BCOS Solidity 使用Table合约CRUD接口 智能合约例子
  5. 7723java之战,满江红4之江山美人
  6. 基于SSM的在线商城系统(最新)
  7. cactiez mysql_cactiez v11添加对mysql数据库、apache系统进行监控
  8. 计算机网络综合应用实验报告,计算机网络综合实验报告
  9. redis 字符串类型命令
  10. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 nacos