Java Log4j2.xml配置文件未解析mapMessage属性

Java Log4j2.xml配置文件未解析mapMessage属性,java,log4j2,Java,Log4j2,我试图将变量的messageMap传递给日志,但是当我这样做时,我无法通过%k{key}语法访问它们。然而,映射正在通过,但是作为一个普通的消息对象。如果我将%msg打印到控制台中,则会打印所有变量及其值 在控制台消息中,我希望在末尾看到传递的%K{ip}值,但似乎没有获得任何值,但ip字符串位于%msg值中 请查看我的代码,如果我遗漏了什么,请告诉我。 配置文件: <?xml version="1.0" encoding="UTF-8"?> <Conf

我试图将变量的messageMap传递给日志,但是当我这样做时,我无法通过%k{key}语法访问它们。然而,映射正在通过,但是作为一个普通的消息对象。如果我将%msg打印到控制台中,则会打印所有变量及其值

在控制台消息中,我希望在末尾看到传递的%K{ip}值,但似乎没有获得任何值,但ip字符串位于%msg值中

请查看我的代码,如果我遗漏了什么,请告诉我。 配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
        <Configuration status="debug">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n  %K{argsString} %K{ip} %n%ex{full}%n" />
        </Console>
        <JDBC name="databaseAppender" tableName="durations">
            <ConnectionFactory class="com.lg.log.ConnectionFactory" method="getDatabaseConnection" />
            <Column name="level" pattern="%level" isUnicode="false" />
            <Column name="method" pattern="%K{method}" isUnicode="false" />
            <Column name="arguments" pattern="%K{argsString}" isUnicode="false" />
            <Column name="timestamp" isEventTimestamp="true" />
            <Column name="duration" pattern="%K{duration}" isUnicode="false" />
            <Column name="exception" pattern="%ex{full}" isUnicode="false" />
            <Column name="ip" pattern="%K{ip}" isUnicode="false" />
            <Column name="threadIdentifier" pattern="%K{threadID}" isUnicode="false" />
        </JDBC>
        <JDBC name="databaseExceptionsAppender" tableName="exceptions">
            <ConnectionFactory class="com.lg.log.ConnectionFactory" method="getDatabaseConnection" />
            <Column name="level" pattern="%level" isUnicode="false" />
            <Column name="method" pattern="%K{method}" isUnicode="false" />
            <Column name="arguments" pattern="%K{argsString}" isUnicode="false" />
            <Column name="timestamp" isEventTimestamp="true" />
            <Column name="exception" pattern="%K{exception}" isUnicode="false" />
            <Column name="ip" pattern="%K{ip}" isUnicode="false" />
            <Column name="threadIdentifier" pattern="%K{threadID}" isUnicode="false" />
        </JDBC>
    </Appenders>
    <Loggers>
        <Logger name="com.lg.log.ExceptionLoggerAspect" level="error">
            <AppenderRef ref="databaseExceptionsAppender" />
            <AppenderRef ref="Console" />
        </Logger>
        <Logger name="com.lg.log.DurationLoggingAspect" level="info">
            <AppenderRef ref="databaseAppender"/>
        </Logger>
        <Root level="error">
            <AppenderRef ref="ExceptionLoggerAspect"/>
        </Root>
    </Loggers>
</Configuration>
LOG4J2依赖项:

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>2.9.1</version>
        </dependency>

org.apache.logging.log4j
log4j型芯
2.9.1
org.apache.logging.log4j
log4jweb
2.9.1

log4j2版本2.9开始,您必须使用
org.apache.logging.log4j.message.StringMapMessage
而不是
org.apache.logging.log4j.message.MapMessage
来获取字符串值

StringMapMessage
与2.9版之前的
MapMessage
相同,如所示


另外,
MapMessage
现在是通用类型,您使用的方式应该会收到一些警告。

您使用的是哪个
log4j2
版本?您可以发布您的
log4j2
依赖项吗
15:23:44.705 [main] ERROR com.lg.log.ExceptionLoggerAspect - argsString="" exception="java.lang.AssertionError
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:834)
    at org.junit.Assert.assertEquals(Assert.java:645)
" ip="192.168.0.85" method="com.lg.Test" threadID="1"
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>2.9.1</version>
        </dependency>