有没有办法从每个日志级别的两个单独的logback.xml文件配置回溯?

aka*_*020 3 java logback

我在打包的.war之外有一个logback.xml,我必须使用它来进行INFO和ERROR日志记录配置 - 并且 不能对它进行任何更改.[编辑:可能添加一个或类似的东西最小]
目标 我想以这样的方式设置我的调试日志记录,每个模块都有自己的.log文件等 - 我无法将此配置添加到现有的logback.xml,如上所述.[编辑]另外,我需要一种方法来启用特定模块的调试 - 最好是通过"my"添加的logback.xml

如何从其他.xml文件中获取logback以仅读取调试配置?

编辑添加示例文件:

main/aka不可更改的logback.xml

<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)

<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() &lt;= 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" />
Run Code Online (Sandbox Code Playgroud)

dav*_*xxx 7

您可以使用Logback fileInclusion机制.

文档:

Joran支持从另一个文件中包含部分配置文件.这是通过声明一个元素来完成的.

如果您不知道,Joran是Logback所依赖的组件.您没有要添加的其他库.
以下是包含配置文件的3种方法:

要包含的内容可以作为文件,资源或URL引用.

作为文件: 要包含文件,请使用file属性.您可以使用相对路径,但请注意当前目录由应用程序定义,并且不一定与配置文件的路径相关.

作为资源:

要包含资源,即在类路径中找到的文件,请使用资源属性.

<include resource="includedConfig.xml"/>
Run Code Online (Sandbox Code Playgroud)

作为网址:

要包含URL的内容,请使用url属性.


以下是有关如何实现它的一些提示.

注意配置文件之间的重复元素

我想警告一下在logback配置文件之间不应该重复的唯一元素,例如根元素.

您的实际配置很可能声明了根元素,因此您不应在新配置文件中再次指定它.
对于特定类或包的记录器元素也是如此:您不应该声明它们两次以避免在运行时出现意外行为.

哪些配置文件应包含其他(s)

如果实际配置文件包含常规配置并且新配置文件包含特定配置,则将实际配置文件包含在包含其他配置文件的文件中是有意义的.

拆分配置文件

如果您认为具有多个配置可能有助于您获得更清晰的配置,请不要犹豫将其拆分为多个文件:

...   
<include resource="other-logback-debug_product_a.xml"/>
<include resource="other-logback-debug_product_b.xml"/>
...
Run Code Online (Sandbox Code Playgroud)

注意可加性

在包含的资源中,您应该指定所有记录器的可加性false(true默认情况下),因为我认为您不希望在祖先的appender中复制调试日志.

包含的文件定义了一个RollingFileAppender名为FILE_DEBUG_KIOSK_PRODUCT.
它还为com.product.kiosk.area包含日志级别的包定义了一个记录器,DEBUG并将其附加到appender.
我从你发布的一个appender开始烹饪它(我删除了不相关的部分).

配置文件包括:

<configuration>    
  <include file="includedConfFooLogback.xml"/>  
</configuration>
Run Code Online (Sandbox Code Playgroud)

includedConfFooLogback.xml,包含的配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<included>

    <!-- Debug log -->
    <appender name="FILE_DEBUG_KIOSK_PRODUCT"
        class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>${debug.kiosk.product.dir}/debug.log</file>

        <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>

    <logger name="com.product.kiosk.area" level="DEBUG" additivity="false">
        <appender-ref ref="FILE_DEBUG_KIOSK_PRODUCT" />
    </logger>

</included>
Run Code Online (Sandbox Code Playgroud)