【发布时间】:2018-09-26 10:34:51
【问题描述】:
使用 log4j2 记录器和服务器创建一个 spring-boot 应用程序是 wildfly10/jboss7.1。 我从 Configuration: System Properties 添加了“系统属性”:“loglevel”,并且能够从 Spring Boot 应用程序访问它。我在 log4j2.xml 中调用了这个系统属性来设置日志级别。 log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error" monitorInterval="30">
<Properties>
<Property name="basePath">D://propertieslog</Property>
</Properties>
<Appenders>
<RollingFile name="fileLogger" fileName="${basePath}/acweb.log" filePattern="${basePath}/acweb-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</Console>
<Jdbc name="databaseAppender" tableName="APPLICATION_LOG">
<Filters>
First deny warn, error and fatal messages
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="DEBUG" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL" />
Then accept info, warn, error, fatal and deny debug/trace
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<ConnectionFactory class="path" method="getDatabaseConnection" />
<Column name="LOGLEVEL" pattern="%level" />
<Column name="LOGGER" pattern="%logger" />
<Column name="MESSAGE" pattern="%message" />
</Jdbc>
</Appenders>
<loggers>
<Root level="${sys:loglevel:-ERROR}">
<appender-ref ref="console" />
<appender-ref ref="fileLogger" />
<appender-ref ref="databaseAppender" />
</Root>
</loggers>
</configuration>
控制器类:
@GetMapping("/dashboard")
public ModelAndView welcomeMethod(HttpServletRequest request, HttpServletResponse response,
@ModelAttribute("token") final AccessToken accessToken) {
if(null==accessToken.getJwtToken()) {
logger.trace("A TRACE Message");
logger.debug("A DEBUG Message");
logger.info("An INFO Message");
logger.warn("An WARN Message");
logger.warn("Printing system property1:"+ System.getProperty("loglevel"));
logger.error("An ERROR Message");
logger.error("Printing system property1:"+ System.getProperty("loglevel"));
return new ModelAndView("redirect:launchApp");
}
问题是从wildfly控制台更改系统属性时,它反映在java类日志中,但它没有反映在log4j2.xml中。 log4j2.xml 中的日志级别保持为在应用程序构建期间设置的级别。
将 loglevel 系统属性设置为“WARN”并构建项目并部署它。日志如下:
[WARN ] 2018-09-26 15:13:05.787 [default task-7] WelcomeController - An WARN Message
[WARN ] 2018-09-26 15:13:05.792 [default task-7] WelcomeController - Printing system property1:WARN
[ERROR] 2018-09-26 15:13:05.793 [default task-7] WelcomeController - An ERROR Message
[ERROR] 2018-09-26 15:13:05.793 [default task-7] WelcomeController - Printing system property1:WARN
在同一部署中将 loglevel 系统属性更改为“INFO”,但日志没有更改为 INFO 级别:
[WARN ] 2018-09-26 15:15:34.933 [default task-11] WelcomeController - An WARN Message
[WARN ] 2018-09-26 15:15:34.933 [default task-11] WelcomeController - Printing system property1:INFO
[ERROR] 2018-09-26 15:15:34.935 [default task-11] WelcomeController - An ERROR Message
[ERROR] 2018-09-26 15:15:34.935 [default task-11] WelcomeController - Printing system property1:INFO
【问题讨论】:
-
你是如何初始化 log4j2 日志管理器的?
-
我是这些日志记录和 log4j2 的新手。您能否解释一下 log4j2 日志管理器。 @JamesR.Perkins
-
一般来说,如果您更改系统属性,您需要重新加载日志管理器,因为配置已经被读取。
标签: java jboss7.x log4j2 wildfly-10 system-properties