Ich versuche, eine NachrichtMap Variablen übergeben, um zu protokollieren, aber wenn ich das tun, kann ich nicht über die% k {Schlüssel} -Syntax zugreifen. Die Karte kommt jedoch durch, aber als einfaches Nachrichtenobjekt. Wenn ich% msg in die Konsole drucke, werden alle Variablen mit ihren Werten gedruckt.Log4j2.xml Konfigurationsdatei nicht Parsing MapMessage Eigenschaften
In der Konsolenmeldung würde ich erwarten, den übergebenen% K {ip} -Wert am Ende zu sehen, aber es scheint, dass kein Wert erhalten wird, aber die IP-Zeichenfolge ist in der% msg Wert.
Bitte schauen Sie auf meinen Code und lassen Sie mich wissen, wenn ich etwas vermisse. Konfigurationsdatei:
<?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>
Java-Code:
private void logException(JoinPoint joinPoint, Throwable e) {
Map<String, String> myMessageMap = new HashMap<>();
try {
myMessageMap.put("ip", InetAddress.getLocalHost().getHostAddress().toString());
} catch (UnknownHostException e1) {
myMessageMap.put("ip", "UNKNOWN");
}
if (joinPoint.getTarget() != null) {
myMessageMap.put("method", joinPoint.getTarget().toString() + '.' + joinPoint.getSignature().getName());
} else {
myMessageMap.put("method", joinPoint.getSignature().getName());
}
myMessageMap.put("threadID", String.valueOf(Thread.currentThread().getId()));
myMessageMap.put("exception", ExceptionUtils.getStackTrace(e));
myMessageMap.put("argsString", getArgumentsAsText(joinPoint));
logger.error(new MapMessage(myMessageMap));
}
Konsolenausgabe:
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"
LOG4J2 Abhängigkeiten:
<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>
Welche 'log4j2' Version verwenden Sie? Kannst du deine 'log4j2' Abhängigkeiten posten? –