You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Alla Gofman (Jira)" <ji...@apache.org> on 2020/06/17 21:48:00 UTC

[jira] [Updated] (LOG4J2-2873) Failed to parse json string to LogEvent when massage type is MapMessage

     [ https://issues.apache.org/jira/browse/LOG4J2-2873?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alla Gofman updated LOG4J2-2873:
--------------------------------
          Component/s: Core
    Affects Version/s: 2.13.2
                       2.13.3
          Description: 
I create LogEvent where message is of MapMessage type (key-value pairs).

I send this log even to SocketAppender by JsonLayout. (I tried 2 options with setObjectMessageAsJsonObject true and false)

The Json created:
{quote}Unknown macro: \{"instant"}
,"thread":"MetricsScheduler-7","level":"alert","loggerName":"AlertsLogger","message":"\{key1=value1, component=mft-server, id=DRAFT_101, alertmsg=MFT Server isn't responding!}","endOfBatch":false,"loggerFqcn":"com.*.*.saas.alerts.AlertsLoggerWrapper","contextMap":{},"threadId":26,"threadPriority":5}
{quote}
On ServerSocket side I want to parse/deserialize this json string to  LogEvent and log it to File Appender:
{quote}{{PatternLayout. JSONObject jobj = new JSONObject(line);}}
 {{LogEvent logEvent = new JsonLogEventParser().parseFrom(line);}}
{quote}
 

Then parseFrom() build the LogEvent, message object create of type SimpleMessage and not MapMessage. Then it comes to resolving *%map* pattern in MapPatternConverter.format() - do nothing and return.
{quote}public void format(final LogEvent event, final StringBuilder toAppendTo) {
 MapMessage msg;
 if (event.getMessage() instanceof MapMessage)
Unknown macro: \{ msg = (MapMessage) event.getMessage(); }
else
Unknown macro: \{ return; }{quote}
 

 

 

 

  was:
I create LogEvent where message is of MapMessage type (key-value pairs).

I send this log even to SocketAppender by JsonLayout. (I tried 2 options with setObjectMessageAsJsonObject true and false)

The Json created:
{quote}{"instant":\{"epochSecond":1592427900,"nanoOfSecond":8396100},"thread":"MetricsScheduler-7","level":"alert","loggerName":"AlertsLogger","message":"\{key1=value1, component=mft-server, id=DRAFT_101, alertmsg=MFT Server isn't responding!}","endOfBatch":false,"loggerFqcn":"com.*.*.saas.alerts.AlertsLoggerWrapper","contextMap":{},"threadId":26,"threadPriority":5}
{quote}
On ServerSocket side I want to parse/deserialize this json string to  LogEvent and log it to File Appender:
{quote}{{PatternLayout. JSONObject jobj = new JSONObject(line);}}
{{LogEvent logEvent = new JsonLogEventParser().parseFrom(line);}}{quote}
 

Then parseFrom() build the LogEvent, message object create of type SimpleMessage and not MapMessage. Then it comes to resolving %map pattern in MapPatternConverter.format() - do nothing and return.
{quote}public void format(final LogEvent event, final StringBuilder toAppendTo) {
 MapMessage msg;
 if (event.getMessage() instanceof MapMessage) {
 msg = (MapMessage) event.getMessage();
 } else {
 return;
 }{quote}
 

 

 

 


> Failed to parse json string to LogEvent when massage type is MapMessage
> -----------------------------------------------------------------------
>
>                 Key: LOG4J2-2873
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2873
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.13.2, 2.13.3
>            Reporter: Alla Gofman
>            Priority: Major
>
> I create LogEvent where message is of MapMessage type (key-value pairs).
> I send this log even to SocketAppender by JsonLayout. (I tried 2 options with setObjectMessageAsJsonObject true and false)
> The Json created:
> {quote}Unknown macro: \{"instant"}
> ,"thread":"MetricsScheduler-7","level":"alert","loggerName":"AlertsLogger","message":"\{key1=value1, component=mft-server, id=DRAFT_101, alertmsg=MFT Server isn't responding!}","endOfBatch":false,"loggerFqcn":"com.*.*.saas.alerts.AlertsLoggerWrapper","contextMap":{},"threadId":26,"threadPriority":5}
> {quote}
> On ServerSocket side I want to parse/deserialize this json string to  LogEvent and log it to File Appender:
> {quote}{{PatternLayout. JSONObject jobj = new JSONObject(line);}}
>  {{LogEvent logEvent = new JsonLogEventParser().parseFrom(line);}}
> {quote}
>  
> Then parseFrom() build the LogEvent, message object create of type SimpleMessage and not MapMessage. Then it comes to resolving *%map* pattern in MapPatternConverter.format() - do nothing and return.
> {quote}public void format(final LogEvent event, final StringBuilder toAppendTo) {
>  MapMessage msg;
>  if (event.getMessage() instanceof MapMessage)
> Unknown macro: \{ msg = (MapMessage) event.getMessage(); }
> else
> Unknown macro: \{ return; }{quote}
>  
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)