You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Volkan Yazici (Jira)" <ji...@apache.org> on 2021/06/03 14:23:00 UTC

[jira] [Commented] (LOG4J2-3080) Messages logged inconsistently when using JsonTemplateLayout.

    [ https://issues.apache.org/jira/browse/LOG4J2-3080?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17356467#comment-17356467 ] 

Volkan Yazici commented on LOG4J2-3080:
---------------------------------------

Hrm... The problem is more intricate then I was anticipating.

{{org.apache.logging.log4j.Logger.info(String)}}, logging via the new Log4j 2 API, wraps the content {{String}} into a {{SimpleMessage}} instance, which is treated by {{MessageResolver}} (of {{JsonTemplateLayout}}) in combination with {{fallbackKey}}. Whereas, {{org.apache.log4j.LogManager.getLogger(Main.class).info(String)}}, logging via the legacy Log4j 1 API, wraps the content {{String}} into an {{ObjectMessage}} and consequently {{fallbackKey}} gets deliberately discarded by {{MessageResolver}}. I guess the suspect here is {{org.apache.log4j.Category#maybeLog(String fqcn, Level level, Object message, Throwable throwable)}} method:

{code:java}
private void maybeLog(final String fqcn, final org.apache.logging.log4j.Level level,
        final Object message, final Throwable throwable) {
    if (logger.isEnabled(level)) {
        @SuppressWarnings("unchecked")
        Message msg = message instanceof Map ? new MapMessage((Map) message) : new ObjectMessage(message);
        if (logger instanceof ExtendedLogger) {
            ((ExtendedLogger) logger).logMessage(fqcn, level, null, msg, throwable);
        } else {
            logger.log(level, msg, throwable);
        }
    }
}
{code}

I think when {{message}} is of type {{String}}, {{msg}} should be a {{SimpleMessage}}. I will discuss this further in the {{dev}} mailing list and address the issue accordingly.

> Messages logged inconsistently when using JsonTemplateLayout.
> -------------------------------------------------------------
>
>                 Key: LOG4J2-3080
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3080
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: JsonTemplateLayout
>    Affects Versions: 2.14.1
>            Reporter: Schubert Fernandes
>            Assignee: Volkan Yazici
>            Priority: Major
>             Fix For: 2.15.0
>
>         Attachments: log4j.json.event.layout.zip
>
>
> When using the JsonTemplateLayout and configuring the message with a fallbackKey...
> {code:json}
>   "message": {
>     "$resolver": "message",
>     "fallbackKey": "asString"
>   }
> {code}
> the fallbackKey is not consistently used.
> When logging via _org.apache.log4j.Category.info(Object)_ the message string is logged directly without using the property defined in _fallbackKey_, e.g. 
> {panel}
> {"timestamp":"2021-04-21T14:25:27.625+01:00","loggerName":"explore.log4j.json.template.layout.Main","level":"INFO","{color:red}message":"Message logged using org.apache.log4j.Category.info(Object)"}{color}
> {panel}
> but when logging using _org.apache.logging.log4j.Logger.info(String)_ the message is correctly logged in the _asString_ property as required, i.e.
> {panel}
> {"timestamp":"2021-04-21T14:25:27.628+01:00","loggerName":"explore.log4j.json.template.layout.Main","level":"INFO","{color:green}message":{*"asString"*:"Message logged using org.apache.logging.log4j.Logger.info(String)"}}{color}
> {panel}
> Sample Maven project attached to reproduce.



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