博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java日志框架(二)
阅读量:4490 次
发布时间:2019-06-08

本文共 4703 字,大约阅读时间需要 15 分钟。

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

按笔者理解,现在最流的日志框架解决方案莫过于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日志流向描述图

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 文件滚动输出

ConsoleAppender

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

  • <encoder> : 对日志进行格式化。
  • <target> : 字符串System.out 或者 System.err, 默认 System.out;
%date [%thread] %-5level %logger - %message%newline

FileAppender

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

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

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滚动。
logs/error.log
errorFile.%d{yyyy-MM-dd}.log
30
150
%d [%p] %-5level %logger - %msg%newline

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。

INFO
ACCEPT
DENY
logs/info.log
infoFile.%d{yyyy-MM-dd}.log
30
150
%d [%p] %-5level %logger - %msg%newline

root节点

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

INFO
ACCEPT
DENY
logs/info.log
infoFile.%d{yyyy-MM-dd}.log
30
150
%d [%p] %-5level %logger - %msg%newline
logs/debug.log
debugFile.%d{yyyy-MM-dd}.log
30
150
%d [%p] %-5level %logger - %msg%newline
logs/error.log
errorFile.%d{yyyy-MM-dd}.log
30
150
%d [%p] %-5level %logger - %msg%newline

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

你可能感兴趣的文章
SQL关键字-exists
查看>>
每天一个linux命令(42):kill命令
查看>>
java获取当前路径的几种方法
查看>>
常用的js函数
查看>>
Unity 碰撞检测 OnTriggerEnter 入门
查看>>
利用DFS求联通块个数
查看>>
总结:
查看>>
spring boot 整合redis --sea 方式1
查看>>
Android Http请求方法汇总
查看>>
缓存技术PK:选择Memcached还是Redis?
查看>>
Laravel-lumen 配置JWT
查看>>
MySQL常用存储引擎:MyISAM与InnoDB之华山论剑
查看>>
MVC5+EF6 --自定义控制Action访问权限
查看>>
[CF786B] Legacy
查看>>
Spring 注解@Component,@Service,@Controller,@Repository
查看>>
设置RDLC中table控件的表头在每页显示
查看>>
linux中tomcat内存溢出解决办法 分类: 测试 ...
查看>>
jQuery $.each用法
查看>>
[Luogu 3902]Increasing
查看>>
clear语句处理不同类型的数据结果
查看>>