【问题标题】:log4j logger set default prioritylog4j 记录器设置默认优先级
【发布时间】:2017-07-07 00:17:31
【问题描述】:

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

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

我该如何存档?我感谢任何帮助。

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    好的,我有一个解决方案,不幸的是它涉及到切换到 log4j2。

    我发现 log4j 允许 Property Substitution 允许使用前缀为 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 文件中设置它,或者在不需要时将其保留,并且仍然具有定义的日志级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 2013-08-23
      • 2012-02-14
      • 2014-09-25
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      相关资源
      最近更新 更多