在Logback中,可以使用setLevel()方法更改记录器的日志级别。 但是在Logback中,因为记录器是singleton,所以setLevel()方法的调用将影响所有其他使用相同记录器的线程。如何使用Logback更改当前线程的日志级别
现在我在web应用中使用这样的类:
class FooService {
private void insertRecord(Foo foo) {
// insert one record to DB
}
public void insertOne(Foo foo) {
insertRecord(foo);
}
public void insertMany(List<Foo> foos) {
// I want to stop logging here
for (Foo foo: foos) {
insertRecord(foo);
}
// I want to resume logging here
}
}
,春天ApplicationConfig.xml:
<bean id="traceAdvice"
class="org.springframework.aop.interceptor.CustomizableTraceInterceptor">
<property name="enterMessage"
value="Entering $[targetClassShortName].$[methodName]($[argumentTypes])[$[arguments]]" />
<property name="exitMessage"
value="Exiting $[targetClassShortName].$[methodName] : return = $[returnValue] : time = $[invocationTime]ms" />
<property name="exceptionMessage"
value="Exception thrown in $[targetClassShortName].$[methodName] : $[exception]" />
</bean>
<aop:config>
<aop:pointcut id="pointcut-service"
expression="execution(* my.app.service..*Service.*(..))" />
<aop:advisor advice-ref="traceAdvice" pointcut-ref="pointcut-service" />
</aop:config>
我想记录从insertOne方法insertRecord的调用。另一方面,在insertMany方法中,我希望在循环之前停止日志记录(因为它可能会输出大量日志),并在循环之后继续日志记录。 但是,如果在循环之前调用setLevel(),则日志级别的更改将影响其他线程中使用的其他记录器。在这种情况下,我认为你会在其他线程上得到明确的日志。
我的问题是:如何更改当前线程中使用的记录器的日志级别?
您可以定义一个特定的appender你的包或者你 –
类五言,你可以定义更多的appender类FooService接口,但是如果有两个或更多线程同时执行FooService,则所有线程都会受到setLevel()的影响。这对我来说是不理想的结果。 – satob