我正在使用Spring Boot和Logback记录我的日志。
要求是我想从Spring应用程序日志中识别业务日志,并在Logger.info()中对其进行标记。
例如:
在我的Foo.service之一中
LOGGER.info("this is my business log, I want to tag it")
我想将其与应用程序系统日志和中间件日志区分开。但是,我无法找到一种方法来判断日志是由我(业务逻辑程序员)还是应用程序系统日志编写的。
答案 0 :(得分: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。
答案 1 :(得分: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