The Golang standard library lets you do this:

slog.Info("showing named arguments with structured logging",
    slog.Bool("some-bool", true),
    slog.Int("some-int", 123),
    slog.Float64("some-float64", 1.234),
    slog.String("some-string", "xyz"))

which outputs the following at runtime:

{"time":"2024-04-07T11:10:04.925291-05:00","level":"INFO","msg":"showing
named arguments with structured
logging","some-bool":true,"some-int":123,"some-float64":1.234,"some-string":"xyz"}

I'd like to do this in Java. This seems to be a fairly common use
case. Log4j's API doesn't seem to offer this. The closest I can get
is:

Logger logger = LogManager.getLogger();

logger.info(new MapMessage()
        .with("someInt", 123)
        .with("someFloat", 1.23456)
        .with("someBool", true)
        .with("someString", "abc"));

which outputs the following at runtime. Notice that it just converted
the MapMessage to a string and put that in the JSON message field.:

{"@timestamp":"2024-04-07T16:26:21.232Z","ecs.version":"1.2.0","log.level":"INFO","message":"someBool=\"true\"
someFloat=\"1.23456\" someInt=\"123\"
someString=\"abc\"","process.thread.name":"main","log.logger":"demo.Main"}

Is it possible that log4j3 offer something like what Golang's slog does?

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