多实例web应用程序的Log4j2配置

多实例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

我对Wildfly 10.1应用服务器上war应用程序的log4j2配置有一些问题。 我有以下log4j2.xml文件(位于WEB-INF目录中):

}

如果一个接一个地部署应用程序,则会正确创建日志文件。但当我停止Wildfly,然后删除日志,然后启动Wildfly时,在某些情况下,根本不会为其中一个实例创建日志文件

有人能告诉我哪里不对吗?Is System.setProperty()是否由应用程序的所有实例共享


提前感谢您的帮助。

您可以在.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 ]", "");
}