如何从Spring应用程序日志中识别业务日志并在Logger.info()中标记它们?

问题描述 投票:1回答:2

我正在使用Spring Boot和Logback来记录我的日志。

要求是我想从Spring应用程序日志中识别业务日志并在Logger.info()中标记它们。

例如:

在我的一个Foo.service中

LOGGER.info("this is my business log, I want to tag it")

我想将它与应用程序系统日志和中间件日志区分开来。但是,我无法弄清楚判断日志是由我(业务逻辑程序员)还是应用程序系统日志编写的方法。

spring-boot logging logback slf4j
2个回答
0
投票

通常的方法是您使用的每个Logger对象都有一个名称。最常见的是,每个类都有一个Logger对象,你给它一个与它所在的类相同的名称。如果你的业务逻辑在一个特定的包中,那些记录器都有相同的前缀,你可以设置任何您想要的日志记录配置,将这些日志定向到单独的文件或您正在尝试执行的任何操作。

如果您正在寻找比这更复杂的东西,SLF4J / Logback方法将是use Markers

Marker businessNotification = MarkerFactory.getMarker("BUSINESS_NOTIFICATION");
Logger logger = LoggerFactory.getLogger("aLogger");
//…
logger.info(businessNotification, "this is my business log")

然后,您可以在Logback的PatternLayout中使用%marker,或者通过标记执行更复杂的filtering


0
投票

为避免编写重复的代码(例如为每条消息添加前缀或标记),您可以创建自己的简单包装类:

public class BusinessLogger {
    private final Logger logger; // initialize in constructor, can even add a getter if needed

    public void info(String msg) {
        logger.info("[BUSINESS] " + msg);
    }
}

用法:

// class member, can even be static
BusinessLogger logger = new BusinessLogger(LoggerFactory.getLogger(this.getClass()));

// in a method
logger.info("this is my business log")

输出:

[2019-02-13 13:41:21.009] [INFO] 12540 [Test worker] : [BUSINESS] this is my business log

如果您希望所有日志都是业务日志,这将很有效。如果您仍然必须使用原始记录器,您可以执行logger.getLogger().info("non-business info");,给出:

[2019-02-13 13:41:22.414] [INFO] 12540 [Test worker] : non-business info
© www.soinside.com 2019 - 2024. All rights reserved.