我有一个独立的java应用程序,带有以下config 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
,则应使用错误。
我该如何实现?感谢任何帮助。
好吧,我有一个解决方案,不幸的是它涉及切换到log4j2。
我发现log4j允许属性替换允许使用前缀sys:
使用系统属性。结合此发现(我可以使用简单的-
设置默认值),我将配置更改为:
<?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文件中,或者如果不需要,则将其遗漏并且仍然具有定义的日志级别。