多实例web应用程序的Log4j2配置
我对Wildfly 10.1应用服务器上war应用程序的log4j2配置有一些问题。 我有以下log4j2.xml文件(位于WEB-INF目录中): } 如果一个接一个地部署应用程序,则会正确创建日志文件。但当我停止Wildfly,然后删除日志,然后启动Wildfly时,在某些情况下,根本不会为其中一个实例创建日志文件 有人能告诉我哪里不对吗?Is System.setProperty()是否由应用程序的所有实例共享多实例web应用程序的Log4j2配置,web,instance,war,log4j2,Web,Instance,War,Log4j2,我对Wildfly 10.1应用服务器上war应用程序的log4j2配置有一些问题。 我有以下log4j2.xml文件(位于WEB-INF目录中): } 如果一个接一个地部署应用程序,则会正确创建日志文件。但当我停止Wildfly,然后删除日志,然后启动Wildfly时,在某些情况下,根本不会为其中一个实例创建日志文件 有人能告诉我哪里不对吗?Is System.setProperty()是否由应用程序的所有实例共享 提前感谢您的帮助。您可以在.yaml或.properties文件中将insta
提前感谢您的帮助。您可以在.yaml或.properties文件中将instanceName设置为config,并在log4j2.properties中使用它。您可以在.yaml或.properties文件中将instanceName设置为config,并在log4j2.properties中使用它
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Properties>
<Property name="logDir">${sys:jboss.server.log.dir}</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<RollingRandomAccessFile
name="FileLogger"
fileName="${logDir}/${sys:loggerFileName}.log"
filePattern="${logDir}/$${date:yyyy-MM}/${sys:loggerFileName}-%d{yyyy-MM-dd}-%i.log.zip">
<PatternLayout pattern="%d{HH:mm:ss,SSS} %-5level [%t] %logger{36} - %msg%n"/>
<Policies>
<OnStartupTriggeringPolicy />
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="128MB" />
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${logDir}" maxDepth="2">
<IfFileName glob="*/${sys:loggerFileName}-*.log.zip" />
<IfLastModified age="30d" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="FileLogger"/>
</Root>
</Loggers>
@WebListener
public class ServletContextInitializer implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent contextEvent) {
String loggerFileName = getLoggerFileNameForContext(servletContext);
System.setProperty("loggerFileName", loggerFileName);
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
ctx.reconfigure();
}
@Override
public void contextDestroyed(ServletContextEvent contextEvent) {
}
private String getLoggerFileNameForContext(ServletContext servletContext) {
String contextPath = servletContext.getContextPath();
return removeNonAlphaNumericCharsFromString(contextPath);
}
private String removeNonAlphaNumericCharsFromString(String input) {
return input.replaceAll("[^A-Za-z0-9 ]", "");
}