SpringBoot整合Logback
本文主要讲与Boot整合,后面会详细讲解Logback
官方文档
ConsoleAppender
如 name 所示,附加在 console 上,或者更准确地说是 System.out 或 System.err,前者是默认目标。 ConsoleAppender
格式 events 借助用户指定的编码器。编码器将在后续章节中讨论。 System.out 和 System.err 都是java.io.PrintStream
类型。因此,它们被包装在OutputStreamWriter
内部,缓冲 I/O 操作。
Property Name | 类型 | 描述 |
编码器 | 编码器 | 请参见OutputStreamAppender properties。 |
目标 | String |
其中一个 String 值 System.out 或 System.err。默认目标是 System.out。 |
withJansi | boolean |
默认情况下,将 jansi property 设置为false 。将 withJansi 设置为true 会激活Jansi library,它为 Windows 机器上的 ANSI 颜色代码提供支持。在 Windows host 上,如果此 property 设置为 true,那么您应该在 class 路径上放置“org.fusesource.jansi:jansi:1.9”。请注意,默认情况下,Unix-based 操作系统(如 Linux 和 Mac OS X)支持 ANSI 颜色代码。 在 Eclipse IDE 下,您可能想尝试ANSI 中的 Eclipse Console插件。 |
这是一个使用ConsoleAppender
的 sample configuration。
Example:ConsoleAppender configuration(logback-examples/src/main/resources/chapters/appenders/conf/logback-Console.xml) 查看为.groovy
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
将当前路径设置为 logback-examples 目录和设置 class 路径后,可以通过发出以下命令为上述 configuration 文件添加一个旋转:
java chapters.appenders.ConfigurationTester src/main/java/chapters/appenders/conf/logback-Console.xml
FileAppender
FileAppender是OutputStreamAppender
的子类,将 log events 附加到文件中。目标文件由“文件”选项指定。如果该文件已存在,则根据追加 property 的 value 将其追加或截断。
Property Name | 类型 | 描述 |
附加 | boolean |
如果 true,events 附加在现有文件的末尾。否则,如果 append 为 false,则会截断任何现有文件。默认情况下,append 选项设置为 true。 |
编码器 | 编码器 | 请参见OutputStreamAppender properties。 |
文件 | String |
要写入的文件的 name。如果该文件不存在,则创建该文件。在 MS Windows 平台上,用户经常忘记逃避反斜杠。对于 example,value c:\ temp\test.log 不太可能被正确解释,因为' t'是一个被解释为单个制表符( u0009)的转义序列。正确的值可以指定为 c:/temp/test.log,也可以指定为 c:\ temp \ test.log。 “文件”选项没有默认的 value。 如果文件的 parent 目录不存在,FileAppender 将自动创建它,包括任何必要但不存在的 parent 目录。 |
谨慎 | boolean |
在谨慎模式下,FileAppender 将安全地写入指定的文件,即使存在其他FileAppender 实例 running 在不同的 JVM 中,也可能在不同的主机上运行。谨慎模式的默认 value 是false 。 谨慎模式可以与RollingFileAppender 一起使用,尽管有些限制适用。 谨慎模式意味着追加 property 会自动设置为 true。 谨慎更依赖于独占文件锁。实验表明,文件锁定大约是写入 logging event 成本的三倍(x3)。在写入位于本地硬盘上的文件的“普通”PC 上,当谨慎模式关闭时,写一个 logging event 大约需要 10 微秒。当谨慎模式打开时,输出单个 logging event 大约需要 30 微秒。这意味着当谨慎模式关闭时,logging 吞吐量为每秒 100'000 次事件,而谨慎模式下每秒约为 33'000 次事件。 谨慎模式有效地序列化写入同一文件的所有 JVM 之间的 I/O 操作。因此,随着竞争访问文件的 JVM 数量的增加,每个 I/O 操作所引起的延迟也会增加。由于操作的总数在每秒 20 个 log 请求的 order 中,因此对 performance 的影响应该可以忽略不计。 每秒生成 100 次或更多 I/O 次操作的应用程序可以看到对 performance 的影响,应避免使用谨慎模式。 网络文件锁当 log 文件位于网络文件系统上时,审慎模式的成本会更高。同样重要的是,网络文件系统上的文件锁定有时会产生强烈的偏差,以至于 process 当前拥有锁定时会立即锁定锁定。因此,当一个 process 占用 log 文件的锁时,其他进程也会等待锁定到出现死锁状态。 谨慎模式的影响在很大程度上取决于网络速度以及 OS implementation 细节。我们提供了一个名为FileLockSimulator的非常小的 application,它可以帮助您模拟环境中谨慎模式的行为。 |
立即刷新默认情况下,每个 log event 立即刷新到基础输出流。这种默认方法更安全,因为如果你的 application 退出而没有正确关闭 appenders,logging events 就不会丢失。但是,为了显着增加 logging 吞吐量,您可能希望将 immediateFlush property 设置为false
。
下面是FileAppender
的 configuration 文件的示例:
Example:FileAppender configuration(logback-examples/src/main/resources/chapters/appenders/conf/logback-fileAppender.xml) 查看为.groovy
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<append>true</append>
<!-- set immediateFlush to false for much higher logging throughput -->
<immediateFlush>true</immediateFlush>
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender> <root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
将当前目录更改为 logback-examples 后,通过启动以下命令运行此 example:
java chapters.appenders.ConfigurationTester src/main/java/chapters/appenders/conf/logback-fileAppender.xml
唯一命名的 files(按时间戳)
在 application 开发阶段或 short-lived applications 的情况下,e.g. batch applications,最好在每次新的 application 启动时创建一个新的 log 文件。借助``元素,这很容易做到。这是一个 example。
Example:按时间戳(logback-examples/src/main/resources/chapters/appenders/conf/logback-timestamp.xml)唯一命名的 FileAppender configuration 查看为.groovy
<configuration>
<!-- Insert the current time formatted as "yyyyMMdd'T'HHmmss" under
the key "bySecond" into the logger context. This value will be
available to all subsequent configuration elements. -->
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<!-- use the previously created timestamp to create a uniquely
named log file -->
<file>log-${bySecond}.txt</file>
<encoder>
<pattern>%logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
timestamp 元素采用两个必需属性 key 和 datePattern 以及一个可选的 timeReference 属性。 key 属性是 key 的 name,时间戳可用于后续 configuration 元素作为变量。 datePattern 属性表示 date pattern,用于将当前 time(解析 configuration 文件)转换为 string。 date pattern 应遵循SimpleDateFormat中定义的约定。 timeReference 属性表示 time 戳记的 time reference。默认值为 configuration 文件的 interpretation/parsing time,i.e。当前 time。但是,在某些情况下,使用 context birth time 作为 time reference 可能很有用。这可以通过将 timeReference 属性设置为"contextBirth"
来完成。
通过 running 命令试验``元素:
java chapters.appenders.ConfigurationTester src/main/resources/chapters/appenders/conf/logback-timestamp.xml
要将 logger context birth date 用作 time reference,可以将 timeReference 属性设置为“contextBirth”,如下所示。
Example:使用 context birth date 作为 time reference(logback-examples/src/main/resources/chapters/appenders/conf/logback-timestamp-contextBirth.xml)的时间戳 查看为.groovy
<configuration>
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"
timeReference="contextBirth"/>
...
</configuration>
RollingFileAppender 进行
RollingFileAppender 进行扩展FileAppender
,具有翻转 log files 的功能。对于 example,RollingFileAppender
可以 log 到名为 log.txt file 的文件,并且一旦满足某个条件,就将其 logging 目标更改为另一个文件。
有两个重要的 sub-components 与RollingFileAppender
相互作用。第一个RollingFileAppender
sub-component,即RollingPolicy
,(见下文)负责进行翻转所需的行动。 RollingFileAppender
的第二个 sub-component,即TriggeringPolicy
,(见下文)将确定是否以及何时发生翻转。因此,RollingPolicy
负责什么和TriggeringPolicy
负责何时。
为了任何用途,RollingFileAppender
必须同时设置RollingPolicy
和TriggeringPolicy
。但是,如果也实现了TriggeringPolicy
接口,那么只需要明确指定前者。
以下是RollingFileAppender
的可用 properties:
Property Name | 类型 | 描述 |
文件 | String |
请参见FileAppender properties。 |
附加 | boolean |
请参见FileAppender properties。 |
编码器 | 编码器 | 请参见OutputStreamAppender properties。 |
rollingPolicy | RollingPolicy |
此选项是 component,它将在发生翻转时指示RollingFileAppender 的行为。查看以下更多信息。 |
triggeringPolicy | TriggeringPolicy |
此选项是 component,它将告诉RollingFileAppender 何时激活翻转过程。查看以下更多信息。 |
谨慎 | boolean |
谨慎模式不支持FixedWindowRollingPolicy。 RollingFileAppender 与TimeBasedRollingPolicy一起支持谨慎模式,尽管有两个限制。 在谨慎模式下,不支持也不允许文件压缩。 (我们不能将一个 JVM 写入文件而另一个 JVM 正在压缩 it.) FileAppender 的文件 property 无法设置并且必须留空。实际上,大多数操作系统不允许重命名文件而另一个 process 有它打开. 另见 properties for FileAppender 。 |
滚动 policies 概述
RollingPolicy负责涉及文件移动和重命名的翻转程序。
RollingPolicy
界面如下所示:
package ch.qos.logback.core.rolling;
import ch.qos.logback.core.FileAppender;
import ch.qos.logback.core.spi.LifeCycle;
public interface RollingPolicy extends LifeCycle {
public void rollover() throws RolloverFailure;
public String getActiveFileName();
public CompressionMode getCompressionMode();
public void setParent(FileAppender appender);
}
rollover
方法完成了归档当前 log 文件所涉及的工作。调用getActiveFileName()
方法来计算当前 log 文件的文件 name(写入实时日志的位置)。如getCompressionMode
方法所示,RollingPolicy 还负责确定压缩模式。最后,RollingPolicy
通过setParent
方法给它的 parent 一个 reference。
TimeBasedRollingPolicy
TimeBasedRollingPolicy可能是最受欢迎的滚动政策。它定义基于 time 的翻转 policy,用于 example 按天或按月。 TimeBasedRollingPolicy
承担翻滚责任以及触发所述翻转的责任。实际上,TimeBasedTriggeringPolicy
实现了RollingPolicy
和TriggeringPolicy
接口。
TimeBasedRollingPolicy
的 configuration 需要一个必需的 fileNamePattern property 和几个可选的 properties。
Property Name | 类型 | 描述 |
fileNamePattern | String |
必需的 fileNamePattern property 定义 rolled-over(已存档)log files 的 name。它的 value 应该包含文件的 name,以及一个适当放置的%d 转换说明符。 %d 转换说明符可能包含java.text.SimpleDateFormat class 指定的 date-and-time pattern。如果省略 date-and-time pattern,则假定使用默认的 pattern yyyy-MM-dd。 翻转期间是从 fileNamePattern 的 value 推断的. 请注意,RollingFileAppender 中的文件 property(TimeBasedRollingPolicy 的 parent)可以设置或省略。通过设置包含FileAppender 的文件 property,您可以分离 active log 文件的位置和已归档的 log files 的位置。当前日志将始终以文件 property 指定的文件为目标。因此,当前 active log 文件的 name 不会在 time 时间内发生变化。但是,如果选择省略文件 property,则将根据 fileNamePattern 的 value 为每个句点重新计算 active 文件。以下示例应澄清这一点。 在%d {}的荣誉中找到的 date-and-time pattern 遵循 java.text.SimpleDateFormat 惯例。 fileNamePattern property 或 date-and-time pattern 中任何位置的正斜杠'/'或反斜杠''字符都将被解释为目录分隔符。 多个%d 说明符 可以指定多个%d 说明符,但只能有一个可以是主要的 i.e。用于推断翻转期。必须通过传递'aux'参数将所有其他令牌标记为辅助(参见下面的示例)。 多个%d 说明符允许您在不同于 roll-over 期间的文件夹结构中组织存档文件。例如,下面显示的文件 name pattern 按年和月组织 log 文件夹,但每天午夜组织 roll-over log files。 /var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.log ** TimeZone ** 在某些情况下,您可能希望根据 timezone 中与 host 不同的时钟 yyyy-MM-dd log files。可以在%d 转换说明符中的 date-and-time pattern 之后传递 timezone 参数。对于 example: aFolder/test.%d{yyyy-MM-dd-HH, UTC}.log 如果指定的 timezone 标识符未知或拼写错误,则假定 GMT timezone 由TimeZone.getTimeZone(String)方法规范指定。 |
maxHistory | INT | 可选的 maxHistory property 控制要保留的最大归档 files 数,异步删除旧的 files。例如,如果您指定每月翻转,并将 maxHistory 设置为 6,则将保留 6 个月的档案 files,并删除超过 6 个月的 files。请注意,删除旧的归档 log files 后,将删除为 log 文件归档而创建的任何文件夹。 |
totalSizeCap | INT | 可选的 totalSizeCap property 控制所有 archive files 的总大小。超过总大小上限时,将异步删除最旧的归档。 totalSizeCap property 也需要设置 maxHistory property。此外,始终首先应用“最大历史记录”限制,然后应用“总大小上限”限制。 |
cleanHistoryOnStart | boolean | 如果设置为 true,将在 appender 启动时执行归档删除。默认情况下,此 property 设置为 false。 归档删除通常在翻转期间执行。但是,某些应用程序可能无法存活 long 足以触发翻转。因此,对于这样的 short-lived applications,存档移除可能永远不会有机会执行。通过将 cleanHistoryOnStart 设置为 true,可以在 appender 启动时执行存档删除。 |
这里有几个fileNamePattern
值,并解释了它们的效果。
fileNamePattern | 滚动时间表 | 例 |
/wombat/foo。%d | 每日翻转(午夜)。由于省略了%d 标记说明符的可选 time 和 date pattern,因此假定 yyyy-MM-dd 的默认 pattern,它对应于每日翻转。 | file property 未设置:在 2006 年 11 月 23 日期间,logging 输出将转到文件/wombat/foo.2006-11-23。在午夜和 24 日的 rest,logging 输出将被定向到/wombat/foo.2006-11-24。 file property 设置为/wombat/foo.txt:在 2006 年 11 月 23 日期间,logging 输出将转到文件/wombat/foo.txt。在午夜,foo.txt 将重命名为/wombat/foo.2006-11-23。将创建一个新的/wombat/foo.txt 文件,对于 11 月 24 日的 rest,logging 输出将被定向到 foo.txt。 |
/wombat/%d {yyyy/MM} /foo.txt | 每个月初的滚动。 | file property 未设置:在 2006 年 10 月期间,logging 输出将转到/wombat/2006/10/foo.txt。在 10 月 31 日午夜和 11 月 rest 之后,logging 输出将被定向到/wombat/2006/11/foo.txt。 file property 设置为/wombat/foo.txt:active log 文件将始终为/wombat/foo.txt。在 2006 年 10 月期间,logging 输出将达到/wombat/foo.txt。 10 月 31 日午夜,/wombat/foo.txt 将重命名为/wombat/2006/10/foo.txt。将创建一个新的/wombat/foo.txt 文件,其中 logging 输出将用于 11 月的 rest。 11 月 30 日午夜,/wombat/foo.txt 将重命名为/wombat/2006/11/foo.txt,依此类推。 |
/wombat/foo。%d {。 221} .log | 每周第一天的滚动。请注意,一周的第一天取决于 locale。 | 与之前的情况类似,除了翻转将在每个新周的开始时发生。 |
/wombat/foo%d {。 222} .log | 在每小时的顶部翻滚。 | 与之前的情况类似,除了翻转将发生在每小时的顶部。 |
/wombat/foo%d {。 223} .log | 每分钟开始时的滚动。 | 与之前的情况类似,除了翻转将在每分钟开始时发生。 |
/wombat/foo%d {yyyy-MM-dd_HH-mm,UTC} .log | 每分钟开始时的滚动。 | 与之前的情况类似,但文件名将以 UTC 表示。 |
/foo/%d {yyyy-MM,aux} /%d.log | 每日滚动。存档位于包含年份和月份的文件夹下。 | 在此 example 中,第一个%d 标记被标记为aux iliary。然后假定第二个%d 标记(省略 time 和 date pattern)为主要标记。因此,每天都会发生翻转(默认为%d),文件夹 name 将取决于年份和月份。例如,在 2006 年 11 月期间,存档的 files 将全部放在/foo/2006-11/文件夹下,e.g /foo/2006-11/2006-11-14.log。 |
任何正斜杠或反斜杠字符都被解释为文件夹(目录)分隔符。将根据需要创建任何所需的文件夹。因此,您可以轻松地将 log files 放在单独的文件夹中。
TimeBasedRollingPolicy
支持自动文件压缩。如果 fileNamePattern 选项的 value _end 为.gz 或.zip,则启用此 feature。
fileNamePattern | 滚动时间表 | 例 |
/wombat/foo。%d.gz | 每日翻转(午夜),对存档的 files 进行自动 GZIP 压缩。 | file property 未设置:在 2009 年 11 月 23 日期间,logging 输出将转到文件/wombat/foo.2009-11-23。但是,在午夜,该文件将被压缩为/wombat/foo.2009-11-23.gz。对于 11 月 24 日,logging 输出将被定向到/wombat/folder/foo.2009-11-24,直到它在第二天开始时翻转。 file property 设置为/wombat/foo.txt:在 2009 年 11 月 23 日期间,logging 输出将转到/wombat/foo.txt 文件。在午夜,该文件将被压缩并重命名为/wombat/foo.2009-11-23.gz。将创建一个新的/wombat/foo.txt 文件,其中 logging 输出将发送到 11 月 24 日的 rest。 11 月 24 日午夜,/wombat/foo.txt 将被压缩并重命名为/wombat/foo.2009-11-24.gz,依此类推。 |
fileNamePattern 具有双重用途。首先,通过研究 pattern,logback 计算请求的翻转周期。其次,它计算每个归档文件的 name。请注意,两种不同的模式可以指定相同的周期。模式 yyyy-MM 和 yyyy@MM 都指定每月翻转,但生成的存档 files 将带有不同的名称。
通过设置文件 property,您可以分离 active log 文件的位置和已归档的 log files 的位置。 logging 输出将定位到文件 property 指定的文件中。因此,active log 文件的 name 不会在 time 时间内发生变化。但是,如果选择省略文件 property,则将根据 fileNamePattern 的 value 为每个句点重新计算 active 文件。通过保留文件选项未设置,可以避免在翻转期间存在引用 log files 的外部文件句柄时发生的文件重命名错误。
maxHistory property 控制要保留的最大归档文件数,删除旧的 files。例如,如果您指定每月翻转,并将 maxHistory 设置为 6,则将保留 6 个月的档案 files,并删除超过 6 个月的 files。请注意,删除旧的归档 log files 后,将删除为 log 文件归档而创建的任何文件夹。
由于各种技术原因,翻转不是 clock-driven,而是取决于 logging events 的到来。例如,在 2002 年 3 月 8 日,假设 fileNamePattern 设置为 yyyy-MM-dd(每日翻转),则午夜之后第一个 event 的到达将触发翻转。如果在午夜之后的 23 分 47 秒没有 logging events,那么翻转实际上将发生在 3 月 9 日 00:2347 AM 而不是 0:00 AM。因此,根据 events 的到达率,可能会以一些延迟触发翻转。但是,无论延迟如何,已知翻转算法是正确的,因为在某个时间段内生成的所有 logging events 将在限定该时间段的正确文件中输出。
这是RollingFileAppender
的 sample configuration 与TimeBasedRollingPolicy
一起使用。
示例:使用TimeBasedRollingPolicy
(logback-examples/src/main/resources/chapters/appenders/conf/logback-RollingTimeBased.xml)Sample 配置RollingFileAppender
查看为.groovy
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logFile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history capped at 3GB total size -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
下一个 configuration sample 说明了在谨慎模式下使用与TimeBasedRollingPolicy
相关联的RollingFileAppender
。
示例:使用TimeBasedRollingPolicy
(logback-examples/src/main/resources/chapters/appenders/conf/logback-PrudentTimeBasedRolling.xml)Sample 配置RollingFileAppender
查看为.groovy
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- Support multiple-JVM writing to the same log file -->
<prudent>true</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
基于大小和 time 的滚动 policy
有时您可能希望基本上通过 date 归档 files 但是在 time 限制每个 log 文件的大小,特别是如果 post-processing 工具对 log files 施加大小限制。为了满足此要求,logback 附带了SizeAndTimeBasedRollingPolicy
。
请注意,TimeBasedRollingPolicy
已经允许限制存档的 log files 的组合大小。如果您只想限制 log 档案的组合大小,那么上面描述的TimeBasedRollingPolicy
和设置totalSizeCap property 应该足够了。
这是一个 sample configuration 文件,演示了基于 time 和 size 的 log 文件归档。
例如:SizeAndTimeBasedFNATP
(logback-examples/src/main/resources/chapters/appenders/conf/logback-sizeAndTime.xml)的 Sample configuration 查看为.groovy
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="ROLLING" />
</root>
</configuration>
请注意除“%d”之外的“%i”转换标记。 %i 和%d 标记都是必需的.当前 log 文件在当前 time 周期_end 之前达到 maxFileSize 的每个 time,它将以增加的索引存档,从 0 开始。
基于大小和 time 的归档支持删除旧的归档 files。您需要使用 maxHistory property 指定要保留的句点数。当您的 application 停止并重新启动时,logging 将_在正确的位置 i.e。在当前时期的最大指数。
在 1.1.7 之前的版本中,本文档提到了一个名为SizeAndTimeBasedFNATP
的 component。但是,鉴于SizeAndTimeBasedFNATP
提供了更简单的 configuration 结构,我们不再记录SizeAndTimeBasedFNATP
。尽管如此,使用SizeAndTimeBasedFNATP
的早期 configuration files 将会继续正常工作。事实上,SizeAndTimeBasedRollingPolicy
是用SizeAndTimeBasedFNATP
子组件实现的。
FixedWindowRollingPolicy
翻新时,FixedWindowRollingPolicy根据固定窗口算法重命名 files,如下所述。
fileNamePattern 选项表示已归档(已翻转)log files 的文件 name pattern。此选项是必需的,并且必须在 pattern 中的某处包含 integer 标记%i。
以下是FixedWindowRollingPolicy
的可用 properties
Property Name | 类型 | 描述 |
minIndex | int |
此选项表示窗口索引的下限。 |
maxIndex | int |
此选项表示窗口索引的上限。 |
fileNamePattern | String |
此选项表示_pat 在重命名 log files 时将遵循的 pattern。它必须包含 string%i,它将指示将插入当前窗口索引的 value 的位置。 对于 example,使用与最小值和最大值 1 和 3 关联的 MyLogFile%i.log 将生成名为 MyLogFile1.log,MyLogFile2.log 和 MyLogFile3.log 的归档文件。 请注意,文件压缩也是通过此 property 指定的。对于 example,fileNamePattern 设置为 MyLogFile%i.log.zip 表示必须使用 zip 格式压缩已归档的 files; gz 格式也受支持。 |
鉴于固定窗口滚动 policy 需要与窗口大小一样多的文件重命名操作,因此强烈建议不要使用大窗口大小。当用户指定较大的值时,当前 implementation 将自动将窗口大小减小到 20。
让我们回顾一下固定窗口翻转 policy 的更具体的例子。假设 minIndex 设置为 1,maxIndex 设置为 3,fileNamePattern property 设置为 foo%i.log,文件 property 设置为 foo.log。
翻车数量 | Active 输出目标 | 存档的 log files | 描述 |
0 | foo.log | - | 还没有发生翻转,退回登录到初始文件。 |
1 | foo.log | foo1.log | 第一次翻转。 foo.log 重命名为 foo1.log。创建一个新的 foo.log 文件并成为 active 输出目标。 |
2 | foo.log | foo1.log,foo2.log | 第二次翻转。 foo1.log 重命名为 foo2.log。 foo.log 重命名为 foo1.log。创建一个新的 foo.log 文件并成为 active 输出目标。 |
3 | foo.log | foo1.log,foo2.log,foo3.log | 第三次翻转。 foo2.log 重命名为 foo3.log。 foo1.log 重命名为 foo2.log。 foo.log 被重命名为 foo1.log。创建一个新的 foo.log 文件并成为 active 输出目标。 |
4 | foo.log | foo1.log,foo2.log,foo3.log | 在此轮次和后续轮次中,翻转开始时删除 foo3.log。通过递增索引来重命名其他 files,如前面的步骤所示。在此后续翻转中,将有三个存档日志和一个 active log 文件。 |
下面的 configuration 文件给出了配置RollingFileAppender
和FixedWindowRollingPolicy
的示例。请注意,即使文件选项包含与使用 fileNamePattern 选项传送的相同信息,也必须使用“文件”选项。
示例:使用FixedWindowRollingPolicy
(logback-examples/src/main/resources/chapters/appenders/conf/logback-RollingFixedWindow.xml)Sample 配置RollingFileAppender
查看为.groovy
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender> <root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
代码示例
logback-spring.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="consoleApp" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</layout>
</appender>
<appender name="fileInfoApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</encoder>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 路径 -->
<fileNamePattern>app_log/log/app.info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="fileErrorApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</encoder> <!-- 设置滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 路径 -->
<fileNamePattern>app_log/log/app.err.%d.log</fileNamePattern> <!-- 控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,
且<maxHistory> 是1,则只保存最近1个月的文件,删除之前的旧文件 -->
<MaxHistory>1</MaxHistory> </rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="consoleApp"/>
<appender-ref ref="fileInfoApp"/>
<appender-ref ref="fileErrorApp"/>
</root>
</configuration>
SpringBoot整合Logback的更多相关文章
- springboot(二).springboot整合logback用于日志输出
springboot整合logback用于日志输出 我们项目的基本框架已经完成,http请求已经可以访问,现在给我们的框架添加日志记录的功能并能将每天的记录记录到文件中去 在这里,我们使用logbac ...
- SpringBoot整合Logback日志框架配置全解析
目录 本篇要点 一.Logback日志框架介绍 二.SpringBoot与Logback 1.默认日志格式 2.控制台输出 3.文件输出 4.日志级别 5.日志组 6.自定义log配置 三.logba ...
- SpringBoot整合+logback日志配置
本次演示的代码结构如下,基于maven,整合SpringBoot.Spring.Mybaits的SSM框架.同时测试logback日志框架的使用及配置. 1.创建maven工程,修改pom.xml文件 ...
- springboot 整合logback(有全套的日志配置文件)
logback介绍:基于Log4j基础上大量改良,不能单独使用,推荐配合日志框架SLF4J来使用,可以和springboot很好的整合,也是springboot默认推荐的. 1.在resources ...
- springboot整合logback集成elk实现日志的汇总、分析、统计和检索功能
在Spring Boot当中,默认使用logback进行log操作.logback支持将日志数据通过提供IP地址.端口号,以Socket的方式远程发送.在Spring Boot中,通常使用logbac ...
- SpringBoot 整合 Logback
Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.L ...
- springboot 整合logback
日志包使用的是springboot内置的日志包,所以我们不许要再专门导入日志包 1.logback-spring.xml配置 <?xml version="1.0" enco ...
- SpringBoot整合logback日志框架
在resource下创建一个名称为 logback-spring.xml文件 <configuration> <!--日志文件夹存放的名称--> <contextName ...
- SpringBoot整合日志框架LogBack
日志可以记录我们应用程序的运行情况,我们可以通过日志信息去获取应用程序更多的信息.常用处理java日志的组件有:slf4j.log4j.logback.common-logging等.其中log4j是 ...
随机推荐
- 报表统计——java实现查询某年某月每天数据,没数据补0
一般图表绘制例如echarts等,返回数据格式都大同小异.重点是利用sql或者java实现数据格式的转型,接下来是关键部分: 1.前提:提供的工具方法——获取某月有多少天 //通过年份和月份确定该月的 ...
- ibatis 学习
1.$与#的区别: 用到#和$来获取传的参数值,其中#是将传来的值替换(如果是字符串,会将‘’带着替换,比如上面$value$,用#value#的话,就会出错.#与$的使用区别:$中间的变量就是直接替 ...
- Linux 文件复制命令cp
文件复制命令cp 命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination) cp [option] source1 source2 source3 ... ...
- C语言I博客作业02
这个作业属于那个课程 C语言程序设计I 这个作业要求在哪 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/8656 我在这个课程的目标 ...
- 高清屏下canvas重置尺寸引发的问题
我们知道,清空canvas画布内容有以下两个方法. 第一种方法是cearRect函数: context.cearRect(0,0,canvas.width,canvas.height) 第二种方法就是 ...
- 使用jsr303实现数据校验
除了前端的js验证,服务端也可加入数据验证,springmvc中有两种方式可以验证输入 利用spring自带的验证框架 利用jsr303实现 jsr303实现数据校验 jsr303是java为bean ...
- 02-16 k近邻算法
目录 k近邻算法 一.k近邻算法学习目标 二.k近邻算法引入 三.k近邻算法详解 3.1 k近邻算法三要素 3.1.1 k值的选择 3.1.2 最近邻算法 3.1.3 距离度量的方式 3.1.4 分类 ...
- springboot redis-cache 自动刷新缓存
这篇文章是对上一篇 spring-data-redis-cache 的使用 的一个补充,上文说到 spring-data-redis-cache 虽然比较强悍,但还是有些不足的,它是一个通用的解决方案 ...
- Java的Object类
(1)Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类. (2)Object类的构造方法有一个,并且是无参构造 这其实就是理解当时我们说过,子类构造方法默认访问父类的构造是 ...
- 零基础转行web前端,如何高效的去学习web前端
web前端开发要学的知识内容涉及的会很宽泛,虽然说主要是HTML.CSS和JavaScript这些基础知识点,但学前端开发除了要学这些基础知识外,学员还要在这之上进行延伸和深入的去学,而且互联网时代不 ...