logback日志系统
2021-12-04 18:06:36 43 举报
AI智能生成
Logback是一个Java日志框架,它是Log4j的改进版,设计目标是提供更快速、更灵活的日志记录。它完全兼容SLF4J接口,并提供了丰富的配置选项和灵活的日志输出方式。Logback的主要特点包括:高性能、可扩展性、灵活性、稳定性和易用性。它支持将日志输出到控制台、文件、数据库等多种目标,同时还支持异步日志记录和日志级别过滤等功能。此外,Logback还提供了丰富的过滤器和转换器,可以方便地对日志进行格式化和处理。总之,Logback是一个功能强大、性能优越的Java日志框架,适用于各种规模的应用程序开发。
作者其他创作
大纲/内容
介绍、使用
Logback 继承自 log4j
官方
中文手册
日志级别
可以设置TRACE,DEBUG,INFO,WARN,ERROR,FATAL或OFF之一
Logback 的架构非常的通用,适用不同的使用场景。
Logback 被分成三个不同的模块:logback-core,logback-classic,logback-access。
Logback 被分成三个不同的模块:logback-core,logback-classic,logback-access。
logback-core 是其它两个模块的基础。
logback-classic 模块可以看作是 log4j 的一个优化版本,它天然的支持 SLF4J,所以你可以随意的从其它日志框架(例如:log4j 或者 java.util.logging)切回到 logack。
logback-access 可以与 Servlet 容器进行整合,例如:Tomcat、Jetty。它提供了 http 访问日志的功能。
logback-classic 模块可以看作是 log4j 的一个优化版本,它天然的支持 SLF4J,所以你可以随意的从其它日志框架(例如:log4j 或者 java.util.logging)切回到 logack。
logback-access 可以与 Servlet 容器进行整合,例如:Tomcat、Jetty。它提供了 http 访问日志的功能。
使用:
通过如下的三个步骤可以启用 logback 来记录日志
通过如下的三个步骤可以启用 logback 来记录日志
配置 logback 环境。你可以通过简单或者复杂的方式来做,这个在后面会叙述到。
如果你想在每个类中打印日志,那么你需要将当前类的全称或者当前类当作参数,调用 org.slf4j.LoggerFactory.getLogger() 方法。
也可以通过@Slft方式
使用实例 logger 来调用不同的方法来打印日志。例:debug(),info(),warn(),error()。通过这些方法将会在配置好的 appender 中输出日志。
执行流程
内容详细使用
Logger 上下文
描述
任何日志 API 的优势在于它能够禁止某些日志的输出,但是又不会妨碍另一些日志的输出。
通过假定一个日志空间,这个空间包含所有可能的日志语句,这些日志语句根据开发人员设定的标准来进行分类。
在 logback-classic 中,分类是 logger 的一部分,每一个 logger 都依附在 LoggerContext 上,
它负责产生 logger,并且通过一个树状的层级结构来进行管理。
它负责产生 logger,并且通过一个树状的层级结构来进行管理。
规则
一个 Logger 被当作为一个实体,它们的命名是大小写敏感的,并且遵循以下规则
命名层次结构
如果一个 logger 的名字加上一个 . 作为另一个 logger 名字的前缀,那么该 logger 就是另一个 logger 的祖先。
如果一个 logger 与另一个 logger 之间没有其它的 logger ,则该 logger 就是另一个 logger 的父级。
如果一个 logger 的名字加上一个 . 作为另一个 logger 名字的前缀,那么该 logger 就是另一个 logger 的祖先。
如果一个 logger 与另一个 logger 之间没有其它的 logger ,则该 logger 就是另一个 logger 的父级。
例如:
名为 com.foo 的 logger 是名为 com.foo.Bar 的 logger 的父级。
名为 java 的 logger 是名为 java.util 的父级,是名为 java.util.Vector 的祖先。
名为 com.foo 的 logger 是名为 com.foo.Bar 的 logger 的父级。
名为 java 的 logger 是名为 java.util 的父级,是名为 java.util.Vector 的祖先。
root logger 作为 logger 层次结构的最高层。
它是一个特殊的 logger,因为它是每一个层次结构的一部分。
每一个 logger 都可以通过它的名字去获取。
每一个 logger 都可以通过它的名字去获取。
Logger rootLogger = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)
有效等级又称为等级继承
描述
Logger 能够被分成不同的等级。不同的等级(TRACE, DEBUG, INFO, WARN, ERROR)定义在 ch.qos.logback.classic.Level 类中。
在 logback 中,类 Level 使用 final 修饰的,所以它不能用来被继承。一种更灵活的方式是使用 Marker 对象。
在 logback 中,类 Level 使用 final 修饰的,所以它不能用来被继承。一种更灵活的方式是使用 Marker 对象。
方法打印以及基本选择规则
描述
根据定义,打印的方法决定的日志的级别。例如:L 是一个 logger 实例,L.info("...") 的日志级别就是 INFO。
日志的打印级别为 p,Logger 实例的级别为 q,如果 p >= q,则该条日志可以打印出来。
子主题
这条规则是 logbakc 的核心。各级别的排序为:TRACE < DEBUG < INFO < WARN < ERROR。
获取 Logger
描述
通过 LoggerFactory.getLogger() 可以获取到具体的 logger 实例,名字相同则返回的 logger 实例也相同。
可以通过配置一个 logger,然后在其它地方获取,而不需要传递引用。
父级 logger 总是优于子级 logger,并且父级 logger 会自动寻找并关联子级 logger,即使父级 logger 在子级 logger 之后实例化。
父级 logger 总是优于子级 logger,并且父级 logger 会自动寻找并关联子级 logger,即使父级 logger 在子级 logger 之后实例化。
logback 环境的配置会在应用初始化的时候完成。最优的方式是通过读取配置文件。
查找使用xml
如果你使用的是 maven,你可以在 src/test/resources 下新建 logback-test.xml。
maven 会确保它不会被生成。所以你可以在测试环境中给配置文件命名为 logback-test.xml,在生产环境中命名为 logback.xml。
maven 会确保它不会被生成。所以你可以在测试环境中给配置文件命名为 logback-test.xml,在生产环境中命名为 logback.xml。
XML配置详解
configuration
属性
scan属性
scan="true" :让 logback 能够在配置文件改变的时候自动去扫描
<configuration scan="true">
scanPeriod属性
scanPeriod :属性可以指定扫描周期。默认情况下,一分钟扫描一次配置文件,看是否有更改。扫描周期的时间单位可以是毫秒、秒、分钟或者小时。
<configuration scan="true">
debug属性
debug="true" 完全等同于配置一个 OnConsoleStatusListener,即:<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>
<configuration debug="true">
包含标签
statusListener
Logback 通过一个内部的状态系统来报告它本身的状态信息。发生在 logback 生命周期中的事件可以通过 StatusManager 来获取。
appender
输出日志 规则
root
root日志输出
logger
自定义日志输出
contextName
当多个应用输出日志到同一个目的地,设置 logger context 的名字可以更好的区分。
property
logback 支持变量的定义以及替换,变量有它的作用域。而且,变量可以在配置文件中,外部文件中,外部资源文件中,甚至动态定义。
incloud
引入文件
contextName
在之前的[章节](#Logger 上下文)中提到,每一个 logger 都会附加到一个 logger context 上去。默认这个 logger context 的名字为 "default"。但是你可以通过 <contextName> 设置其它的名字。但是如果设置过一次就不能再设置。当多个应用输出日志到同一个目的地,设置 logger context 的名字可以更好的区分。
property
自定义常量
<property name="USER_NAME" value="/data/logs" />
外部资源文件读取
<property resource="logback-config.properties" />
变量值获取
${aNme:-golden}:变量默认值
在某些情况下,如果某个变量没有被声明,或者为空,默认值则非常有用。在 bash shell 中,默认值可以通过 ":-" 来指定。例如:假设变量 aName 没有被定义,"${aNme:-golden}" 会被解释成 "golden" 。
${${userid}.password}:名字嵌套
变量的名字可以包含对其它变量的引用。例如:如果变量 userid=alice,那么 "${${userid}.password}" 就是对变量名为 "alice.passowrd" 的引用。
${id:-${userid}}:默认值嵌套
一个变量的默认值可以引用另一个变量。例如:假设变量 "id" 没有被定义,变量 "userid" 的值为 "alice",那么表达式 "${id:-${userid}}" 的值为 "alice"。
其他
other
HOSTNAME 属性
CONTEXT_NAME 属性
动态定义属性
statusListener
属性
class
Logback 通过一个内部的状态系统来报告它本身的状态信息。发生在 logback 生命周期中的事件可以通过 StatusManager 来获取。
eg:<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>
appender
属性
name
被引用名称(作用:被日志处理引用)
class
输出方式,引用类
文件
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
控制台
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
包含标签
file
文件输出方式,文件名称,如果不存在则会自动创建
encoder
包含标签
pattern
输出格式
属性
root
属性
level
日志输出级别:
level 属性的值可以为:TRACE、DEBUG、INFO、WARN、ERROR、ALL、OFF,但是不能设置为 INHERITED 或 NULL。
level 属性的值可以为:TRACE、DEBUG、INFO、WARN、ERROR、ALL、OFF,但是不能设置为 INHERITED 或 NULL。
包含标签
appender-ref
引用日志输出规则
logger
属性
name
设置日志树,某树级别
additivity
重写默认的累加行为,默认为false
level
日志输出级别:
level 的值为 TRACE,DEBUG,INFO,WARN,ERROR,ALL,OFF,INHERITED,NULL。当 level 的值为 INHERITED 或 NULL 时,将会强制 logger 继承上一层的级别。
level 的值为 TRACE,DEBUG,INFO,WARN,ERROR,ALL,OFF,INHERITED,NULL。当 level 的值为 INHERITED 或 NULL 时,将会强制 logger 继承上一层的级别。
包含标签
appender-ref
引用日志输出规则
included
引入文件
通过文件引入
可以通过 file 属性引入外部文件。可以通过相对路径或者绝对路径来引入。相对路径是指相对应用程序的路径。
通过资源文件引入
可以通过 resource 属性来引入位于 classpath 路径下的资源文件。
<include resource="includedConfig.xml"/>
通过 url 引入文件
可以通过 url 属性来引入外部文件。
<include url="http://some.host.com/includedConfig.xml"/>
附件
logback.xml
成熟日志配置
注意点
如果用户明确的定义了状态监听器,为了避免重复,logback 将不会自动打印状态信息。
所有的 appender 都继承了 AppenderBase 这个抽象类,并实现了 doAppend() 这个方法,该方法是线程安全的。
想要实现
如何实现动态修改日志配置
动态修改配置
收藏
0 条评论
下一页