【发布时间】:2015-11-25 10:59:33
【问题描述】:
是否可以根据我使用的 Spring Boot 配置文件加载不同的 log4j 配置。
假设我在 application.properties
log.level=DEBUG
log.path=/opt/tomcat/logs/blabla.log
log.appender=CONSOLE
在 application-live.properties 我对所有 3 个都有不同的值
log.level=WARN
log.path=/crazy/tomcat/logs/blabla.log
log.appender=FILE
在 log4j.xml 我有 CONSOLE appender、FILE appender 和多个记录器的定义
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${log.path}" />
<param name="maxFileSize" value="8MB"/>
<param name="maxBackupIndex" value="50"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{MM-dd HH:mm:ss} [${project.artifactId}-${project.version}] %p [SearchID - %X{searchID}] %c{1}.%M(%L) %m%n" />
</layout>
</appender>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{MM-dd HH:mm:ss} [${project.artifactId}-${project.version}] %p [SearchID - %X{searchID}] %c{1}.%M(%L) %m%n" />
</layout>
</appender>
<logger name="com.mchange" >
<level value="${log.level}" />
<appender-ref ref="${log.appender}" />
</logger>
<logger name="java.sql" >
<level value="${log.level}" />
<appender-ref ref="${log.appender}" />
</logger>
<logger name="org.springframework">
<level value="${log.level}" />
<appender-ref ref="${log.appender}"/>
</logger>
<root>
<level value="${log.level}"/>
<appender-ref ref="${log.appender}"/>
</root>
所以我必须在 log4j.xml 的不同位置注入所有 3 个值 此配置现在不起作用,因为当我使用 -Dlog4j.debug 检查发生了什么时,我看到属性的所有值都丢失了,就像它们不是从 加载的一样加载 log4j 配置时的 application.properties。有没有办法做到这一点。我已经阅读了所有 spring-boot 文档,因为我可以看到没有示例同时使用应用程序属性和我需要的 log4j 等显式日志配置。我还需要补充一点,我不能使用 logback 代替 log4j。
【问题讨论】:
-
你应该考虑切换到 logback 或 log4j2
标签: spring-boot log4j java-8