java - 无法在 WebSphere Liberty 配置文件中为多个应用程序配置 log4j

标签 java websphere log4j2 websphere-liberty open-liberty

我正在 liberty 中部署多个 Web 应用程序,所有这些应用程序都有自己的 log4j 配置文件。每个 WAR 中的 log4j 配置文件都位于 WAR 的 WEB-INF/classes 文件夹中。添加 log4j 配置的 web.xml 片段如下:

<context-param>
                <param-name>log4jConfiguration</param-name>
                <param-value>classpath:portal-log4j2.xml</param-value>
        </context-param>

这似乎适用于所有其他 Tomcat 和 Jboss 应用程序服务器,但不适用于 WebSphere Liberty 配置文件。即使在 WebSphere Basic 配置文件中,似乎也同样有效。在 jvm.options 中指定 -Dlog4j.configurationFile 对我来说不起作用,因为我有多个应用程序

我查看了Websphere Liberty: How to specify log4j2 configuration location?

并尝试了相同的操作。对我来说这导致了以下错误

Exception = javax.xml.stream.XMLStreamException
Source = com.ibm.ws.artifact.loose.internal.LooseContainerFactoryHelper
probeid = 126
Stack Dump = javax.xml.stream.XMLStreamException: ParseError at [row,col]:[8,46]
Message: found: CHARACTERS, expected START_ELEMENT or END_ELEMENT
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.nextTag(XMLStreamReaderImpl.java:1361)
        at com.ibm.ws.artifact.loose.internal.LooseContainerFactoryHelper.createContainer(LooseContainerFactoryHelper.java:80)

我的log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" name="mbaasportal" packages="com.kony.mobilefabric.logger">
    <!-- Filter to control log level dynamically. The name of the key should match with key in TenantContextFilter.java -->
	<DynamicLogFilter key="KONY_PORTAL_DYNAMIC_LOG_LEVEL" />
	<Appenders>
        <CustomRollingFile name="logfileappender" fileName="${sys:LOG_LOCATION}/mbaasportal.log" append="true" filePattern="${sys:LOG_LOCATION}/mbaasportal.log.%i">
            <MobileFabricPatternLayout>
                <ProductName>console.portal</ProductName>
            </MobileFabricPatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </CustomRollingFile>

        <Console name="dockerappender" target="SYSTEM_OUT">            
            <JsonLayout compact="true" eventEol="true" properties="true" locationInfo="true">
                <KeyValuePair key="fabricService" value="console.portal"/>
            </JsonLayout>
        </Console>

        <Console name="consoleappender" target="SYSTEM_OUT"> 
            <MobileFabricPatternLayout> 
                <ProductName>console.portal</ProductName>
            </MobileFabricPatternLayout> 
        </Console>

        <Socket name="SYSLOGappender" host="localhost" port="514" protocol="UDP">
            <Rfc3164SyslogLayout charset="ISO-8859-1" ProductName="console.portal"/>
        </Socket>
    </Appenders>

    <Loggers>
    
    	<Logger name="org.hibernate" level="ERROR" additivity="false">
            <AppenderRef ref="${sys:LOG_OPTION}appender"/>
        </Logger>

        <Logger name="org.springframework" level="ERROR" additivity="false">
            <AppenderRef ref="${sys:LOG_OPTION}appender"/>
        </Logger>

        <Logger name="httpclient" level="ERROR" additivity="false">
            <AppenderRef ref="${sys:LOG_OPTION}appender"/>
        </Logger>
        
        <Logger name="com.kony.mbaas.portal.wsclient.RestTemplateWrapper" level="ERROR" additivity="false">
            <AppenderRef ref="${sys:LOG_OPTION}appender"/>
        </Logger>

        <Root level="${sys:LOG_LEVEL}">
            <AppenderRef ref="${sys:LOG_OPTION}appender"/>
        </Root>
    </Loggers>
</Configuration>

任何有关相同的指导都非常感谢

最佳答案

我与 IBM 支持部门的 Brian 合作解决了此问题。该问题似乎是 Liberty 上的 Log4j2 2.8 特有的,升级到 v2.13 解决了该问题。详情请引用以下内容:

https://developer.ibm.com/answers/questions/526956/log4j-config-file-present-in-webapp-not-loaded-in.html

关于java - 无法在 WebSphere Liberty 配置文件中为多个应用程序配置 log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59790159/

相关文章:

java - 代码在模拟器中崩溃,不知道为什么。 android/java 开发新手

java - 如何在 WebSphere 之外正确存储 Jar 库?

java - 无法在 Windows 控制台中正确打印 ë 等非英语字符

java - Gradle,不在 Windows 上使用 NTLM 代理工作

java - LOG4J作为单例,反正是为了避免web环境下的log4j日志记录冲突

java - 如何读取线程转储?

java - Log4j2 滚动文件覆盖现有日志

java - 带有自定义类加载器的 Log4j2

java - Log4j2 登录到用户主文件夹

java - 在另一个项目中使用变量