博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
logback解析——Appender
阅读量:6958 次
发布时间:2019-06-27

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

在SSM框架搭建Java Web的过程中,需要去做日志处理。在配置logback的时候遇到了不少问题,因此而去深入地了解了一下logback。除了看了很多博客的介绍之外,还去看了一下logback的官方文档,看完之后需要去记录一下所见所得。

首先我们来介绍一个Appender的组成

Appender的类图如下:

ConsoleAppender

ConsoleAppender用于控制台日志输出 官方文档给出了一个示例写法

%-4relative [%thread] %-5level %logger{35} - %msg %n
复制代码
  • <encoder>的作用是将日志格式化,转换为字节数组,并将转换后的字节数组输出到OutputStream 在encoder出现之前,主要依靠Layout来处理日志格式化。

目前,PatternLayoutEncoder唯一真正有用的编码器。它只是包装了 PatternLayout大部分工作。 具体详见https://logback.qos.ch/manual/encoders.html

FileAppender

FileAppender用于将日志以文件形式保存起来 官方文档示例配置如下

log-${bySecond}.txt
%logger{35} - %msg%n
复制代码
  • <timestamp>可以用这个属性来记录这个配置文件的解析时间(我暂时还想不到有什么用)
  • <file>记录文件的地址和文件名

RollingFileAppender

RollingFileAppender是对FileAppender的一个扩展。相较于它的父类,它的主要作用是滚动记录日志。 RollingFileAppender有两个重要的子组件:RollingPolicy和 TriggeringPolicy。RollingPolicy决定日志滚动方式,TriggeringPolicy决定日志滚动的触发条件。 (其实RollingPolicy也可以定义滚动的触发条件)

而RollingPolicy滚动策略包括以下几种:

TimeBasedRollingPolicy

基于时间的滚动策略。这个可能是最常用的滚动策略。 官方文档示例配置如下

logFile.log
logFile.%d{yyyy-MM-dd}.log
30
3GB
%-4relative [%thread] %-5level %logger{35} - %msg%n
复制代码
  • <fileNamePattern>滚动后的文件名,也包括了滚动时间的选择。
  • <maxHistory>保留的存档文件的数量,与上一个fileNamePattern有关。假设定义为6,当fileNamePattern以天为单位时,即保存6天的日志;当以月为单位时,即保存6个月的日志。旧的日志以异步的方式删除。
  • <totalSizeCap>所有的归档日志的大小。当超过限制时,会删掉旧的归档日志。

SizeAndTimeBasedRollingPolicy

SizeAndTimeBasedRollingPolicy是基于时间和文件大小的滚动策略 官方文档示例配置如下

mylog.txt
mylog-%d{yyyy-MM-dd}.%i.txt
100MB
60
20GB
%msg%n
复制代码

<totalSizeCap>限定的是所有的归档日志文件,而<maxFileSize>限定的则是单个日志文件

FixedWindowRollingPolicy

基于窗口大小的滚动策略。 这个听起来可能有点难理解,其实说白了就是将归档日志文件到最大了就写到下一个文件里,而窗口大小就是最多允许多少份日志文件。 官方文档示例配置如下

test.log
tests.%i.log.zip
1
3
5MB
%-4relative [%thread] %-5level %logger{35} - %msg%n
复制代码
  • <minIndex>窗口下限。下限一般都是1啦。
  • <maxIndex>窗口上限。一般我们用上限就可以了。

SizeBasedTriggeringPolicy

SizeBasedTriggeringPolicy其实是TriggeringPolicy(决定什么时候滚动),好像目前暂时也只有这么一个TriggeringPolicy。 主要作用是归档日志文件到达一定大小之后进行日志滚动。 根据网上的说法,TimeBasedRollingPolicy和SizeBasedTriggeringPolicy冲突,不能同时使用。

旧版本的logback里可以在TimeBasedRollingPolicy这个rollingPolicy下配置一个timeBasedFileNamingAndTriggeringPolicy(实现类为SizeAndTimeBasedFNATP)达到同时配置时间和文件大小的滚动策略;而在新版本里其实使用SizeAndTimeBasedRollingPolicy就可以同时满足两个需求了。

附录:

下面给出一个旧版本里Appender的配置:

${log.base}/${log.moduleName}.log
${log.base}/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip
${log.max.size}
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{56}.%method:%L -%msg%n
复制代码

而新版本里的SizeAndTimeBasedRollingPolicy配置,官方给出的示例如下:

mylog.txt
mylog-%d{yyyy-MM-dd}.%i.txt
100MB
60
20GB
%msg%n
复制代码

转载地址:http://meqil.baihongyu.com/

你可能感兴趣的文章
Linux基础系统权限
查看>>
容器技术
查看>>
IE浏览器兼容的处理方式之一,使用特殊的注释 <!--[if IE]> ....<![endif]-->
查看>>
json对象和字符串的相互转换
查看>>
Cobbler学习之一--Fedora17下配置Cobbler安装环境
查看>>
ps教程连接
查看>>
知方可补不足~Sqlserver中的几把锁和.net中的事务级别
查看>>
我心中的核心组件(可插拔的AOP)~第四回 异常拦截器
查看>>
MVVM架构~knockoutjs系列之扩展ajax验证~验证数据是否存在
查看>>
Ubuntu下Android开发环境
查看>>
Python 实习遇见的各种面试题
查看>>
施耐德Sepam 40系列备自投逻辑
查看>>
gulp打包(压缩css,js,加md5码,图片压缩)
查看>>
button的默认类型
查看>>
tomcat server 报错之 More than the maximum allowed number of cookies
查看>>
KendoUI>Framework>Datasource>Overview
查看>>
linux 命令拾遗
查看>>
Hibernate 分组查询 子查询 原生SQL
查看>>
基于.NET平台常用的框架整理
查看>>
springmvc(3)拦截器HandlerInterceptor源码的简单解析
查看>>