wyc*_*yck 5 properties logback
我能够使用Logback PropertyDefiner从logback.xml配置文件中访问单个属性.如果我有3个属性可以访问,我目前正在使用3个独立的PropertyDefiner实现(每个属性一个).
有没有办法从单个PropertyDefiner实现访问多个属性?或许还有另一个支持多个属性的界面?
我希望能够使用属性为各种日志配置(上下文名称,日志级别,appender文件名,文件大小等)基于环境(dev,ist,uat,perf,prod)插入不同的值.
我发现这个问题类似,但没有回答如何访问多个属性的问题.
创建PropertyDefiner实现类.该PropertyDefinerBase实现已经提供.
package foo.bar;
import java.util.HashMap;
import java.util.Map;
import ch.qos.logback.core.PropertyDefinerBase;
public class LoggingPropertiesDefiner extends PropertyDefinerBase {
private static Map<String, String> properties = new HashMap<>();
static {
properties.put("encoderPattern", "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %message%n");
properties.put("maxFileSize", "50MB");
properties.put("rootLogLevel", "INFO");
}
private String propertyLookupKey;
public void setPropertyLookupKey(String propertyLookupKey) {
this.propertyLookupKey = propertyLookupKey;
}
@Override
public String getPropertyValue() {
//TODO In the real world, get properties from a properties loader.
return properties.get(propertyLookupKey);
}
}
Run Code Online (Sandbox Code Playgroud)
在logback.xml中,为每个属性使用相同的PropertyDefiner类.为每个提供不同的查找键:
<define name="encoderPattern" class="foo.bar.LoggingPropertiesDefiner">
<propertyLookupKey>encoderPattern</propertyLookupKey>
</define>
<define name="maxFileSize" class="foo.bar.LoggingPropertiesDefiner">
<propertyLookupKey>maxFileSize</propertyLookupKey>
</define>
<define name="rootLogLevel" class="foo.bar.LoggingPropertiesDefiner">
<propertyLookupKey>rootLogLevel</propertyLookupKey>
</define>
Run Code Online (Sandbox Code Playgroud)
引用logback.xml中的属性名称:
<root level="${rootLogLevel}">
<appender-ref ref="FILE"/>
</root>
Run Code Online (Sandbox Code Playgroud)