logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mikael Ståldal <mi...@apache.org>
Subject Re: Fwd: Add json object to log4j2 when is JSONLayout
Date Fri, 11 Aug 2017 19:39:02 GMT
Note that if we add such option to JsonLayout, then all log messages 
passed to that layout need to be well-formed JSON, otherwise the output 
will not be well-formed JSON. We would make it easy for the user to 
shoot himself in the foot.

I think it would be better to create a new subclass of Message, 
JsonMessage, and let JsonLayout handle such messages specially and 
output as a nested JSON structure (instead as a quoted and escaped 
string as today).

However, how do we represent a JSON structure without adding dependency 
on Jackson or other 3rd party JSON library? Message subcasses are in 
log4j-api, and we do not want log4j-api to depend on any such library. 
Or maybe we should put this new JsonMessage in log4j-core? Or maybe put 
it in a new log4j-json module?

Should we also have XmlMessage for XmlLayout?

What about YamlLayout?


On 2017-08-11 16:56, Gary Gregory wrote:
> Hello,
> 
> The JSON layout outputs the log event in JSON, the event message is just a
> string in that event, in this case, it is escaped following the JSON rules
> to remain a string.
> 
> If you want a JSON object back out of the event message you will have to
> parse it out of that string.
> 
> Feel free to provide a PR on GitHub if you want to add an option to allow
> for a JSON object as the log message. I am not sure if it would be accepted
> though as it is quite different from the current design.
> 
> Thoughts from the community?
> 
> Gary
> 
> 
> On Aug 11, 2017 07:53, "Jeus Geek" <alkhandani@gmail.com> wrote:
> 
> i will show JSON object as a JSON object in log4j2 when is that configed
> JSONLayout .
> 
> JSON object:
> 
> {"line_id": 12,"play_name":"Jeus"}
> 
> import org.apache.logging.log4j.LogManager;import
> org.apache.logging.log4j.Logger;
> public class Main {
> 
>         private static final Logger LOGGER = LogManager.getLogger(Main.
> class);
> 
>         public static void main(String[] args) {
> 
> 
>              String message = "{\"line_id\": 12,\"play_name\": \"Jeus\"}";
>              LOGGER.info(message);
> 
>          }
>   }
> 
> output is:
> 
> {
>   "timeMillis":1502361394238,
>   "thread":"main",
>   "level":"INFO",
>   "loggerName":"com.jeus.logger.json.loggerjson.Main",
>   "message":"{\"line_id\": 12,\"play_name\": \"Jeus\"}",
>   "endOfBatch":false,
>   "loggerFqcn":"org.apache.logging.log4j.spi.AbstractLogger",
>   "contextMap":[
> 
>   ],
>   "threadId":1,
>   "threadPriority":5,
>   "source":{
>      "class":"com.jeus.logger.json.loggerjson.Main",
>      "method":"main",
>      "file":"Main.java",
>      "line":62
>      }
>   }
> 
> but i will show message as a json object same this:
> 
>   "message":{"line_id": 12,"play_name":"Jeus"},
> 
> you can see more detail about my problem in stackOverflow
> <https://stackoverflow.com/questions/45611509/add-json-
> object-to-log4j2-when-is-jsonlayout?noredirect=1#comment78217774_45611509>
> 
> 
> thank you for attention
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Mime
View raw message