我在打包的.war之外有一个logback.xml,我必须使用 INFO&错误日志记录配置 - 无法对其进行任何更改。 [编辑:可能添加一个或类似的东西最小]
目标
我想以这样的方式设置我的调试日志记录,即每个模块都有自己的.log文件等 - 我无法将此配置添加到现有的logback.xml中,如上所述。 [编辑]另外,我需要一种方法来启用特定模块的调试 - 最好是通过“my”添加的logback.xml
如何从其他.xml文件中获取logback以仅读取调试配置?
编辑添加示例文件:
main / aka unchangeable logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<property scope="system" name="component-name" value="COMPONENT_A" />
<property file="$configuration.yaml" />
<property scope="context" name="enable-all-log" value="false" />
<property name="default-log-pattern"
value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{uuid}|%X{instanceID}|%thread||%X{userId}|%level />
<!-- All log -->
<if condition='property("enable-all-log").equalsIgnoreCase("true")'>
<then>
<appender name="ALL_ROLLING"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.home}/${component-name}/${subcomponent-name}/all.log
</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log.home}/${component-name}/${subcomponent-name}/all.log.%i
</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>20MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>${default-log-pattern}</pattern>
</encoder>
</appender>
<appender name="ASYNC_ALL" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="ALL_ROLLING" />
</appender>
</then>
</if>
<!-- Error log -->
<appender name="ERROR_ROLLING"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.home}/${component-name}/${subcomponent-name}/error.log
</file>
<!-- Audit messages filter - deny audit messages -->
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>AUDIT_MARKER</marker>
</evaluator>
<onMismatch>NEUTRAL</onMismatch>
<onMatch>DENY</onMatch>
</filter>
<!-- Debug log -->
<appender name="DEBUG_ROLLING"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.home}/${component-name}/${subcomponent-name}/debug.log
</file>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>TRANSACTION_MARKER</marker>
</evaluator>
<onMismatch>NEUTRAL</onMismatch>
<onMatch>DENY</onMatch>
</filter>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
<expression>
e.level.toInt() <= DEBUG.toInt()
</expression>
</evaluator>
<OnMismatch>DENY</OnMismatch>
<OnMatch>NEUTRAL</OnMatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log.home}/${component-name}/${subcomponent-name}/debug.log.%i
</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>20MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>${default-log-pattern}</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="ASYNC_ERROR" />
<appender-ref ref="ASYNC_DEBUG" />
<if condition='property("enable-all-log").equalsIgnoreCase("true")'>
<then>
<appender-ref ref="ALL_ROLLING" />
</then>
</if>
</root>
<logger name="foo.bar" level="INFO" />
答案 0 :(得分:6)
您可以使用Logback fileInclusion机制。
Joran支持从另一个配置文件中包含部分配置文件 文件。这是通过声明一个元素来完成的。
如果您不知道,Joran是Logback所依赖的组件。您没有要添加的其他库 以下是包含配置文件的3种方法:
要包含的内容可以作为文件,资源或引用 作为网址。
作为文件: 要包含文件,请使用file属性。您可以使用相对路径,但请注意当前目录由应用程序定义,并且不一定与配置文件的路径相关。
作为资源:
要包含资源,即在类路径中找到的文件,请使用 资源属性。
<include resource="includedConfig.xml"/>
作为网址:
要包含网址内容,请使用网址属性。
以下是有关如何实施它的一些提示。
注意配置文件之间的重复元素
我想警告一下在logback配置文件之间不应该重复的唯一元素,例如根元素。
您的实际配置很可能声明了根元素,因此您不应该在新配置文件中再次指定它 对于特定类或包的记录器元素也是如此:您不应该将它们声明两次以避免在运行时出现意外行为。
哪些配置文件应包含其他
如果实际配置文件包含常规配置且新配置文件包含特定配置,则将实际配置文件包含在包含其他配置文件的文件中是有意义的。
拆分配置文件
如果您认为拥有多种配置可能会帮助您拥有 更清洁的配置,不要犹豫,将其拆分为多个文件:
...
<include resource="other-logback-debug_product_a.xml"/>
<include resource="other-logback-debug_product_b.xml"/>
...
注意可加性
在包含的资源中,您应该为所有记录器指定false
(默认为true
)的可加性,因为我认为您不希望调试日志要在祖先的appender中复制。
示例强>
包含的文件定义了名为RollingFileAppender
的{{1}}
它还为FILE_DEBUG_KIOSK_PRODUCT
包定义了一个记录器,其日志级别为com.product.kiosk.area
,并附加了appender。
我从你发布的一个appender开始烹饪它(我删除了不相关的部分)。
配置文件包括:
DEBUG
<configuration>
<include file="includedConfFooLogback.xml"/>
</configuration>
,包含的配置文件:
includedConfFooLogback.xml