gpt4 book ai didi

java - 如何将Spring Boot logger设置为仅计划任务?

转载 作者:行者123 更新时间:2023-12-03 11:17:48 26 4
gpt4 key购买 nike

我有一个spring boot项目,因此我将hibernate logger设置为记录请求中的所有查询,如下所示:
在我的application.properties文件中

logging.level.org.hibernate.type=trace
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace
一切正常,我的所有请求都显示了 hibernate 查询的日志。
但是我还有一个预定的任务,每秒钟运行一次,如下所示:
@Scheduled(cron = "${* * * * * *}")
public void task() {
...
}
因此,我只想为此任务执行关闭 hibernate 查询日志,以避免
弄乱我的请求输出日志。
我该如何设置记录仪来做到这一点?谢谢。

最佳答案

如果您使用的是Slf4j和logback,则可以基于映射的诊断上下文(http://logback.qos.ch/manual/mdc.html)进行过滤。
MDC是线程本地的,您可以在其中使用要在记录器中使用的所有键值对。例如:

@Scheduled(cron = "${* * * * * *}")
public void task() {
MDC.put("DONOTLOG", "true")
try {
....
} finally {
MDC.remove("DONOTLOG");
}
}
您可以通过将其放在logback.xml中,在自定义的logback过滤器( http://logback.qos.ch/manual/filters.html)中使用它:
<configuration>
<appender name="...">

<filter class="...SampleFilter" />

</appender>
SampleFilter:
public class SampleFilter extends Filter<ILoggingEvent> {

@Override
public FilterReply decide(ILoggingEvent event) {
if (event.getMDCPropertyMap().containsKey("DONOTLOG")) {
return FilterReply.DENY;
} else {
return FilterReply.NEUTRAL;
}
}
}

关于java - 如何将Spring Boot logger设置为仅计划任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63379625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com