第三章 初始化配置(一)
我们首先介绍配置Logback的方法,并提供了许多示例配置脚本。在后面的章节中,我们将介绍Logback所依赖的配置框架Joran。
初始化配置
在应用程序代码中插入日志请求需要大量的规划和努力。观察表明,大约4%的代码用于记录。因此,即使是一个中等大小的应用程序也会包含数千个嵌入其代码的日志语句。
考虑到它们的数量,我们需要工具来管理这些日志语句。
可以通过编程方式或使用XML、Groovy或序列化模型格式的配置脚本来配置Logback。
对于现有的log4j用户来说,他们可以使用我们的PropertiesTranslator网页应用将log4j.properties文件转换为logback.xml。
让我们先讨论一下Logback的配置初始化步骤:
-
Logback会通过服务加载机制来查找自定义的Configurator。如果找到,则优先于Logback自己的配置器,例如DefaultJoranConfigurator(请参阅下文)。
自定义的Configurator是接口ch.qos.logback.classic.spi.Configurator的实现。它们是通过位于META-INF/services/ch.qos.logback.classic.spi.Configurator中的配置来加载的。
该文件中应该使用全限定类名来指定希望加载的自定义的Configurator。 -
从1.3.9/1.4.9版本以后,如果用户没有像第一步一样提供自定义的Configurator,则Logback将实例化一个SerializedModelConfigurator。
鉴于用户兴趣不足,
SerializedModelConfigurator
将于2025年7月1日从初始化序列中移除。由于
SerializedModelConfigurator
并未受到用户的关注,并且随着logback-tyler项目的出现,
SerializedModelConfigurator
将在不久的将来从Logback的初始化序列中移除。因此,我们不建议您依赖SerializedModelConfigurator
。- 如果设置了系统属性“logback.scmoFile”,则
SerializedModelConfigurator
将尝试定位“logback.scmoFile”指定的文件,如果能够找到该文件,它将被读取并用于配置。 - 如果上述系统属性未设置或指定文件无法找到,则
SerializedModelConfigurator
将在classpath中搜索序列化配置模型文件logback-test.scmo,如果可以找到该文件,则会读取并解释其用于配置。 - 如果上述文件无法找到,
SerializedModelConfigurator
将在classpath中搜索序列化配置模型文件logback.scmo。 - 如果无法找到序列化配置模型文件,则
SerializedModelConfigurator
将返回执行状态要求调用下一个可用的配置器,即DefaultJoranConfigurator
。
从序列化模型文件中读取配置可以更快地执行,并且不需要任何XML库。与GraalVM结合使用时,这可能会产生更小的可执行文件并加快启动速度。
- 如果设置了系统属性“logback.scmoFile”,则
-
常规配置,如果之前的配置器无法找到所需的资源,系统会创建并执行默认的配置器
DefaultJoranConfigurator
。- 如果设置了系统属性“logback.configurationFile”,则
DefaultJoranConfigurator
将尝试定位“logback.configurationFile”指定的文件,如果能够找到该文件,它将被读取并用于配置。 - 如果上一步失败了,
DefaultJoranConfigurator
将尝试在classpath中查找配置文件*“logback-test.xml”*,如果能够找到该文件,则会读取并解析它以进行配置。 - 如果找不到这样的文件,它将尝试在类路径中查找配置文件*“logback.xml”*,如果能够找到该文件,则会读取并解析其配置信息。需要注意的是,这是常规的配置步骤。
PropertiesConfigurator(1.5.8版本引入)允许通过属性文件设置记录器级别。可以通过文件路径或HTTP/HTTPS协议的URL指定属性文件的位置。
还支持监视文件并在更改时重新配置。请注意,以properties格式编写的配置文件应作为XML格式的主配置文件的一部分,或由logback-tyler生成的配置器的一部分。- 如果无法找到配置文件,则
DefaultJoranConfigurator
将返回执行状态要求调用下一个可用的配置器,即BasicConfigurator
。
- 如果设置了系统属性“logback.configurationFile”,则
-
如果上述方法都失败了,logback-classic将使用BasicConfigurator自动配置自己,这样会将日志输出到控制台。
在没有配置文件的情况下,最后一步旨在提供一种默认(但非常基本)的日志记录功能。
如果你使用的是遵循Maven文件夹结构的构建工具,那么将logback-test.xml放在src/test/resources文件夹下,
Maven会确保它不会被包含在生成的工件中。因此,在测试时可以使用logback-test.xml配置文件,而在生产环境中则可以使用logback.xml配置文件。
Joran解析指定的配置文件大约需要100毫秒。要在应用程序启动时节省这些时间,可以使用步骤1的服务加载机制来自定义Configurator,
使用BasicConfigurator是个不错的选择。
更好的办法是,使用TylerConfigurator方便快捷的将XML文件转换为Java类。
鉴于Groovy是一门完整的编程语言,为了保护无辜者(避免潜在的安全或复杂性问题),我们已停止对logback.groovy的支持。
不过,Tucker Pelletier在virtualdogbert/logback-groovy-config项目中继续维护了对Groovy的支持。