Java Logging: show the source line number of the caller (not the logging helper method)

前端 未结 8 1356
太阳男子
太阳男子 2020-12-08 03:50

The numerous (sigh...) logging frameworks for Java all do a nice job of showing the line number of the source file name for the method that created the log message:

8条回答
  •  一整个雨季
    2020-12-08 04:49

    Alternative answer.

    It is possible to ask log4j to exclude the helper class by using the method

    Category.log(String callerFQCN, Priority level, Object message, Throwable t)

    and specifying the helper class as 'callerFQCN'.

    For example here is a class using a helper:

    public class TheClass {
        public static void main(String...strings) {
            LoggingHelper.log("Message using full log method in logging helper.");
            LoggingHelper.logNotWorking("Message using class info method");
    }}
    

    and the code of the helper:

    public class LoggingHelper {
    private static Logger LOG = Logger.getLogger(LoggingHelper.class);
    
    public static void log(String message) {
        LOG.log(LoggingHelper.class.getCanonicalName(), Level.INFO, message, null);
    }
    
    public static void logNotWorking(String message) {
        LOG.info(message);
    } }
    

    The first method will output your expected result.

    Line(TheClass.main(TheClass.java:4)) Message using full log method in logging helper.
    Line(LoggingHelper.logNotWorking(LoggingHelper.java:12)) Message using class info method
    

    When using this method, Log4j will work as usual, avoiding calculating the stack trace if it is not required.

提交回复
热议问题