Logging with multiple parameters

后端 未结 3 879
你的背包
你的背包 2021-02-07 00:49

I am currently working on a program wherein, I must write all output to a log file.

I need to write a log method, that should give an output with a level, a message, an

3条回答
  •  醉酒成梦
    2021-02-07 01:19

    It's a quite old topic, anyhow, my two cents, because I also prefer to use java.util.logging.Logger` in my projects where sufficient.

    Lambdas make this boilerplate Formatter extension for multiple custom parameters more or less obsolete, unless you benefit from its application-wide reuse. In (my) simple scenarios, log messages are tailored to the code part where it is inserted, so String.format() is usually much easier and more flexible.

    Before Java 8 and lambdas, the Formatter was the only possibility to postpone the message construction. The only alternative was, to construct the message to log in advance before the loggable check based on the Level took place.
    With Java 8 lambdas, the String formatting can be postponed to after the loggable check, but still with access to the original method context. The only small downside is, that all accessed fields need to be final, due to the lambda restrictions.

    Here a fairly simple snippet:

    final String val1 = "lambda expression log message";
    final Level level = Level.INFO;
    Logger.getGlobal().log(level, () -> 
            String.format("Hello, I'm a %s, evaluated after %s loggable check.", val1, level)
    );
    Logger.getGlobal().log(level, new RuntimeException(), () -> 
            String.format("Hello, I'm a %s with a stack trace, evaluated after %s loggable check.", val1, level)
    );
    

    Hope this helps some of you who also want to use the built-in logging :-)

    Cheers Ben

提交回复
热议问题