在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