2017-10-18 1 views
1

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> 
+0

Welche 'log4j2' Version verwenden Sie? Kannst du deine 'log4j2' Abhängigkeiten posten? –

Antwort

1

Von log4j2 versi auf 2.9, müssen Sie org.apache.logging.log4j.message.StringMapMessage anstelle von org.apache.logging.log4j.message.MapMessage für Zeichenfolge nur Werte verwenden.

StringMapMessage ist das gleiche wie MapMessage vor Version 2.9 wie JavaDcos.

Auch MapMessage ist von generischem Typ jetzt, die Art, wie Sie Sie verwenden, sollte einige Warnungen erhalten.

Verwandte Themen