log4j记录器设置默认优先级

vohkndzv  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(179)

我有一个独立的java应用程序,它具有以下配置log4j.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="file" class="org.apache.log4j.RollingFileAppender">
        <param name="maxFileSize" value="1MB" />
        <param name="maxBackupIndex" value="1" />
        <param name="File"
            value=".\\myComp.log" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd.MM.yy HH\:mm\:ss.SSS} %5p %c{1}:%L - %m%n " />
        </layout>
    </appender>

    <category name="com.mycomp.project.starter">
        <priority value="${project.client.log.level.starter}" />
    </category>
    <category name="com.security">
        <priority value="${project.client.log.level.security}" />
    </category>

    <root>
        <level value="ERROR" />
        <appender-ref ref="file" />
    </root>

</log4j:configuration>

当我启动应用程序时,我可以通过ini文件设置日志级别,该文件可以包含:

-Dproject.client.log.level.starter=INFO
-Dproject.client.log.level.security=DEBUG

我想归档的是,如果没有设置-Dproject.client.log.level.security=DEBUG,它应该使用ERROR。
我怎么才能做到呢?我很感激你的帮助。

oewdyzsn

oewdyzsn1#

好吧,我有一个解决方案,不幸的是它涉及到切换到log4j2。
我发现log4j允许属性替换允许使用前缀为sys:的系统属性。结合this finding(在这里我可以用一个简单的-设置默认值),我将我的配置更改为:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <RollingFile  name="file" fileName=".\\myComp.log" append="true" filePattern=".\\myComp-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{dd.MM.yy HH:mm:ss.SSS} %5p %c{1}:%L - %m%n "/>
            <Policies>
                <SizeBasedTriggeringPolicy size="1 MB"/>
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!-- setting log level per default to INFO if not set through system properties -->
        <Logger name="com.myComp.starter" level="${sys:project.client.log.level.starter:-INFO}" />
        <!-- setting log level per default to ERROR if not set through system properties -->
        <Logger name="com.security" level="${sys:project.client.log.level.security:-ERROR}" />
        <Root level="ERROR">
            <AppenderRef ref="file"/>
        </Root>
    </Loggers>
</Configuration>

现在我可以在ini文件中设置它,或者在不需要的情况下忽略它,并且仍然有一个定义的日志级别。

相关问题