我已经以域模式格式配置了我的WildFly 18服务器,我们使用log4j记录器。当我签入server.log文件时,log4j中的所有日志都以wildfly自己的记录器格式记录。就像下面这行一样,第一个日期和日志级别来自服务器日志,下一个日期格式和日志级别以及日志消息来自log4j。
2021-03-19 00:13:06,623 INFO 2021-03-19 00:13:06,601 INFO [com.app.connection.service] CurrentThreadID=436 On
我搜索了很多。。。我发现了很多与独立模式相关的配置,有些人说这些配置可以在domain.xml中完成,但什么都不起作用
我在domain.xml 中有以下配置
<subsystem xmlns="urn:jboss:domain:logging:8.0">
<custom-handler name="CUSTOM-FILE" class="org.jboss.logmanager.handlers.PeriodicSizeRotatingFileHandler" module="org.jboss.logmanager">
<formatter>
<named-formatter name="MY-PATTERN"/>
</formatter>
<properties>
<property name="maxBackupIndex" value="24"/>
<property name="rotateSize" value="10000000"/>
<property name="suffix" value=".yyyy-MM-dd-HH"/>
<property name="append" value="true"/>
<property name="fileName" value="${jboss.server.log.dir}/server.log"/>
</properties>
</custom-handler>
<logger category="com.arjuna">
<level name="WARN"/>
</logger>
<logger category="io.jaegertracing.Configuration">
<level name="WARN"/>
</logger>
<logger category="org.jboss.as.config">
<level name="DEBUG"/>
</logger>
<logger category="sun.rmi">
<level name="WARN"/>
</logger>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="CUSTOM-FILE"/>
</handlers>
</root-logger>
<formatter name="PATTERN">
<pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %s%e%n"/>
</formatter>
<formatter name="MY-PATTERN">
<pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %s%e%n"/>
</formatter>
<formatter name="COLOR-PATTERN">
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p %s%e%n"/>
</formatter>
</subsystem>
在log4j.xml中,我有一个控制台appender,如下所示,这个log4j..xml存在于模块目录中,路径为wildfly18.0.1\modules\org\apache\logging\log4j\main\log4j2props
<Console name="Console">
<PatternLayout pattern="%d %-5p [%c] %mn" />
</Console>
我试过以下几件事:
在日志记录子系统中添加标签
<add-logging-api-dependencies value="false"/> <use-deployment-logging-config value="false"/>
添加记录器
<logger category="stdout" use-parent-handlers="false">
<level name="INFO"/>
<handlers>
<handler name="CUSTOM-FILE"/>
</handlers>
</logger>
- 从部署中排除子系统和模块。在META-INF\jboss-deployment-structure.xml中添加了以下内容
我们使用EAR部署文件
<deployment>
<exclude-subsystems>
<subsystem name="logging"/>
</exclude-subsystems>
<exclusions>
<module name="org.apache.commons.logging"/>
<module name="org.apache.log4j"/>
<module name="org.jboss.logging"/>
<module name="org.jboss.logging.jul-to-slf4j-stub"/>
<module name="org.jboss.logmanager"/>
<module name="org.jboss.logmanager.log4j"/>
<module name="org.slf4j"/>
<module name="org.slf4j.impl"/>
</exclusions>
</deployment>
所以,请有人帮我配置正确的域模式设置吗?
提前感谢。。。
我不确定这是一个选项,但WildFly 22支持log4j2,因此您可以使用WildFly配置日志记录,而不需要包含log4j2.xml。
看起来您想要将stdout
重定向到一个文件。如果您希望您的log4j2配置控制格式,则需要更改MY-FORMATTER
的格式。以下是一些用于配置服务器的CLI命令。
# Add the pattern for the stdout logger
/subsystem=logging/pattern-formatter=MY-PATTERN:add(pattern="%s%n")
# Create a file to direct stdout to
/subsystem=logging/periodic-size-rotating-file-handler=CUSTOM-FILE:add(named-formatter=MY-PATTERN, max-backup-index=24, rotate-size="10m", suffix=".yyyy-MM-dd-HH", append=true, file={relative-to=jboss.server.log.dir, path=server-stdout.log})
# Create the stdout logger, direct it to the file only
/subsystem=logging/logger=stdout:add(handlers=[CUSTOM-FILE], use-parent-handlers=false)
请注意,我将日志文件重命名为server-stdout.log
,以避免覆盖默认的server.log
。原因是服务器本身将记录到此文件,如果用该模式覆盖它,则服务器本身的日志将不会被格式化。
还要注意,写入System.out
的任何内容也将最终写入server-stout.log
。
正如许多其他评论中所写的那样,Jboss添加了自己的模式,并将应用程序的模式log4j2.xml视为"消息";按照自己的模式。要解决此问题,请在Jboss Standalone.xml 的日志记录子系统中添加以下内容
<subsystem xmlns="urn:jboss:domain:logging:8.0">
....
<console-handler name="stdout-console" autoflush="true">
<level name="ALL"/>
<formatter>
<pattern-formatter pattern="%s%n"/>
</formatter>
</console-handler>
<logger category="stdout" use-parent-handlers="false">
<handlers>
<handler name="stdout-console"/>
</handlers>
</logger>
....
</subsystem>
这将导致Jboss的默认日志模式被覆盖,并且您的日志将具有您在log4j2.xml控制台appender中配置的内容。