Java 当log4j2';s logger.error()在Spring引导中触发
我使用的是带有log4j2的Spring引导,我想在触发Java 当log4j2';s logger.error()在Spring引导中触发,java,spring,spring-boot,log4j2,Java,Spring,Spring Boot,Log4j2,我使用的是带有log4j2的Spring引导,我想在触发logger.error(…)时触发'@Service'类中的一个自定义方法 比如说, @Service public class Foo { private final Logger logger = LogManager.getLogger(getClass()); ... public void doSomething() { try { ... }
logger.error(…)
时触发'@Service'类中的一个自定义方法
比如说,
@Service
public class Foo {
private final Logger logger = LogManager.getLogger(getClass());
...
public void doSomething() {
try {
...
}
catch (Exception e) {
logger.error("Error!", e); // When `error` is triggered...
}
}
}
// Other class
@Service
public class Bar {
@Autowired private NotificationService notificationService;
public void triggeredOnError() { // I'd like to trigger this method
this.notificationService.notifySomething();
}
}
我想知道这在log4j2和springboot中是可能的。问题是,我只想触发默认方法
logger.error(…)
,因为我不想更改log4j2的默认行为。我研究了一个bit-andfilter
或adapter
可能是这里的解决方案,但我不确定如何实现这一点。请帮帮我 IMO实现这一点的最简单方法是创建一个特殊的appender,并在Log4j2配置中将其与您选择的记录器相关联(如果您想要“全局”配置,也可以与所有记录器相关联)
然后,您可以使用“appender筛选器”仅在出现错误消息时调用appender
唯一的潜在问题是从log4j2appender联系Springbean。阅读以了解如何在技术上实现这一点
这种方法的好处是,您不需要更改框架,而是利用它已经提供的配置选项 虽然appender可以像Mark建议的那样工作,但我会实现一个过滤器。过滤器可放置在Log4j 2中的四个不同位置,并可选择强制记录日志事件、强制不记录日志事件或继续正常评估是否应记录日志事件。但是过滤器总是可以配置为onMatch=NEUTRAL和onMismatch=NEUTRAL,这样它实际上对日志事件是否被处理没有影响,但允许进行一些其他处理。此外,过滤器比附加器更容易编写 您可以在以下位置找到示例过滤器:
不过,您不应该在筛选器中使用它作为将日志事件写入某个目标的方式。这正是Appender的用途。您可以使用Java logging util而不是Log4j吗?如果可以,我可以为您的场景提供一种方法,顺便说一句,Java logging util(jdk 11)与log4j@MehrdadHosseinNejad说java.util.logging与log4j完全相似是胡说八道。jul不支持标记,不支持参数化格式字符串,只支持日志字符串,而不像Log4j那样支持消息,不附带多个处理程序,不具有线程上下文(又名MDC)的等价物,等等。此外,所有的性能测试都表明jul的性能非常糟糕,并且很难将其他日志框架与之集成。这个问题可以有很多有效的答案,而“最好的”答案主要是意见问题。我明白了-所以我想使用的是
过滤器
-非常感谢Hanks的回答,你的答案也很有帮助!