使用log4j2记录器和服务器创建一个spring-boot应用程序是wildfly10/jboss7.1。我从Configuration:System Properties添加了“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");
}
[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
[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.xml。
除了@jamesr.perkins所说的,log4j2的配置说明:
“注意,与Log4J1.x不同,公共Log4J2 API不公开添加、修改或删除附加器和筛选器的方法,也不以任何方式操作配置。”
Log4j2提供了一个通过Java配置日志记录的指南,它对...会有点让人困惑。这是他们的向导。
如果您知道log4j2.xml是如何设置的,那么在阅读本指南并使用我的示例时,这将有助于使其更容易一些。
一个小小的附注...
在我看来,你是在否认一切,然后接受痕迹。最简单的方法是:
<Jdbc name="databaseAppender" tableName="APPLICATION_LOG">
<ThresholdFilter level="DEBUG" onMatch="DENY" onMismatch="NEUTRAL" />
<ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY" />
<!-- Other properties / attributes... -->
</Jdbc>
这就是它的翻译:
-------------------------------- | Level | Int value | Action | -------------------------------- | FATAL | 100 | DENY | -------------------------------- | ERROR | 200 | DENY | -------------------------------- | WARN | 300 | DENY | -------------------------------- | INFO | 400 | DENY | -------------------------------- | DEBUG | 500 | DENY | -------------------------------- | TRACE | 600 | ACCEPT | --------------------------------
如果您在记录器中引用了一个附加器并设置了一个级别,那么您正在设置最小级别。
<appenders>
<FileAppender name="Foo" fileName="theLogPath/fooLog.log" />
</appenders>
<Loggers>
<Logger name="package.FooClass">
<AppenderRef ref="Foo" level="INFO" />
</Logger>
</Loggers>
<FileAppender name="Foo" fileName="theLogPath/fooLog.log">
<ThresholdFilter level="ERROR" onMatch="DENY" onMisMatch="ACCEPT" />
</FileAppender>
如果这没有帮助,让我知道我错过了什么:)
问题内容: 如何从Java程序外部更改user.home系统属性,使其认为它与D:\ Documents and Settings \%USERNAME%是不同的目录?通过环境变量还是VM参数? 问题答案: 设置VM参数应该起作用: 这是一个测试案例: 在Win XP和Linux上使用Java 1.5.0_17测试
问题内容: 我有一个运行的现有jar文件。它是Selenium RC服务器。我希望能够更改JVM httpProxy.host/port/etc系统值。一方面,我可以修改源代码并添加此功能。这将需要一些时间。还有另一种可能的方法吗?就像我自己的JAR(将设置这些JVM属性)在同一个JVM实例中调用selenium- rc(这样,它便能够修改其JVM变量的值)? 问题答案: 您可以使用以下命令在命令
问题内容: 我需要在运行时在应用程序中更改属性。例如,我有一项服务,该服务发送带有重置密码的电子邮件。要求有效期为12小时。但是我想在运行时将此时间更改为24或更多。我需要给管理员执行此操作的机会。 我的财产文件有 我的服务 我的Spring xml配置 我可以在运行时以某种方式更改此值吗? 问题答案: 只需远离xml配置,就快要到2017年了。 使用@Value,您将从属性文件中获取hours.
我正在编写一个桌面Spring Boot和数据JPA应用程序 初始设置来自应用程序。属性(一些spring.datasource.和spring.jpa.) 我的程序的一个功能是可以通过ui指定数据库设置(rdbms类型、主机、端口、用户名、密码等)<这就是为什么我想在运行时重新定义已经初始化的db属性。这就是为什么我正在寻找一种方法来做到这一点。 我试着做以下事情: 1)我编写了自定义DbCon
我正在尝试选择一些不在我的中的属性。这可能吗? 如何从中获取CatId和持久属性? 如果我将它们添加到组中,就像,那么我的结果就会混乱。 我可以使用获得其他属性,如,但这些属性不是计算值。 数据示例: 希望将结果按如下方式分组:
问题内容: 我的页面中有图像,并且在CSS选择器之前使用:bestyle。 图片是动态的,因此没有固定的宽度;所以我需要动态设置:before规则的宽度。 我想在客户端使用JQuery做到这一点。 假设: 如何使用JQuery 仅更改带有选择器的类的width属性(如果没有选择器,则不能更改一个类的width属性)? 问题答案: 我认为没有直接访问伪类规则的jQuery方法,但是您总是可以在文档的