logback 的配置文件在类路径中找到,因此是特定于 Eclipse 项目的,这不是我想要的。我正在使用多个 Java 实用程序,它们全部驻留在一个项目中(共享类路径),并且我需要对其中一些实用程序使用特定的配置。
我尝试过变量替换和 Joram 配置器,但没有任何效果。这很可能是我的错,有一天我会解决它,但现在我需要一个简单的解决方案。
The configuration file for logback gets found on the classpath, and is therefore Eclipse-project-specific, which is not what I want. I'm using multiple Java utilities, all of them residing in a single project (this sharing the classpath), and I need to use a specific configuration for some of them.
I've tried variable substitution and Joram configurator, but nothing worked for me. This was most probably my fault, and I'm going to solve it one day, but for now I'd need a simple solution.
发布评论
评论(3)
选项 1:使用 logback.configurationFile 系统属性指定 logback 配置文件的位置。事实上,这确实允许您每个项目拥有多个配置文件。根据 logback 文档,此属性的值可以是 URL,类路径上的资源或应用程序外部文件的路径。例如:
-Dlogback.configurationFile=/path/to/config.xml
选项 2:使用变量替换通过系统属性设置日志文件的名称。例如:
-Dmycompany.myapplication=SomeUtility
选项 3:使用系统属性设置记录器级别。这将允许您记录更多/更少。例如:
这会导致指定的包默认以 DEBUG 级别记录。
-Dmycompany.logging.level=INFO
选项 4:通过将系统属性命令行参数传递给 java 来添加/删除附加程序。这将允许您登录到不同的地方。请注意,条件处理需要 janino。例如:
的 logback 配置文件中,将ref
值更改为您自己的值之一。当然是appender>
:<代码>
-Dmycompany.logging.console=true
关于系统属性,您将它们作为
-D
参数传递给 java,例如java -Dmy.property=/path/to/config.xml com.mycompany.MyMain
OPTION 1: specify the location of the logback configuration file with the logback.configurationFile system property. This does in fact allow you to have multiple configuration files per project. As per the logback documentation, the value of the this property can be a URL, a resource on the class path or a path to a file external to the application. For example:
-Dlogback.configurationFile=/path/to/config.xml
OPTION 2: use variable substitution to set the name of the log file with a system property. For example:
<file>/var/tmp/${mycompany.myapplication}.log</file>
-Dmycompany.myapplication=SomeUtility
OPTION 3: set the logger level with a system property. This will allow you to log more/less. For example:
<logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
This causes the specified package to log at DEBUG level by default.
-Dmycompany.logging.level=INFO
OPTION 4: add/remove an appender by passing a system property command-line parameter to java. This will allow you to log to different places. Note that conditional processing requires janino. For example:
<appender-ref>
, changing theref
value to one of your own<appender>
s, of course:<if condition="property("mycompany.logging.console").equalsIgnoreCase("true")">
<then><appender-ref ref="STDOUT"/></then></if>
-Dmycompany.logging.console=true
Regarding system properties, you pass them to java as
-D
arguments, e.g.java -Dmy.property=/path/to/config.xml com.mycompany.MyMain
在 Spring Boot 应用程序中,您可以在 logback 配置文件中引用 Spring Profiles。
请参阅本文。
In a Spring Boot application, you can reference Spring Profiles inside logback configuration file.
See this article.
我使用了基于 列奥尼达博客。有两个文件:
如果属性文件存在并定义了
logEnv
属性,例如logback 会尝试查找并包含 logback-env-
dev66
.xml 中的自定义配置,否则它将回退到默认值(
部分)配置。请注意,自定义配置文件中使用的是
标签,而不是
。logback.xml 来管理上述所有内容:
它将允许您对所有环境进行单独配置,定义自己的自定义配置(例如本地开发)而不影响其他配置。
I have used another option based on Leonidas blog. There are two files:
If the property file exists and defines
logEnv
property e.g.the logback tries to find and include the custom configuration from logback-env-
dev66
.xmlOverwise it will be falback to default (
<else>
section) configuration. Please, note the<included>
tag are using instead of<configuration>
in custom configuration files.the logback.xml to manage all the above things:
It will allow you to have separate configuration for all environments, define own custom configuration (e.g. local development) without influence on others.