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" <alkhand...@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-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org

Reply via email to