मैं अपने एप्लिकेशन (स्प्रिंग इंटीग्रेशन), debug.log और main.log में दो लॉग फाइलें रखना चाहता हूं। मैं एक आईएनएफओ स्तर पर main.log को चलाने और डीबीयूजीजी स्तर पर डीबग.लॉग चलाने के लिए चाहता हूं। यह परिशिष्टों पर फ़िल्टर के साथ करने योग्य है। मैं स्रोत के आधार पर परिशिष्टों को विभिन्न स्तरों को लॉग करना चाहता हूं। दूसरे शब्दों मेंलॉगबैक: दो एपेंडर, एकाधिक लॉगर्स, विभिन्न स्तर
<logger name="org.springframework" level="ERROR">
<appender-ref ref="main" />
</logger>
<logger name="org.springframework" level="DEBUG">
<appender-ref ref="debug" />
</logger>
<logger name="com.myapp" level="INFO">
<appender-ref ref="main" />
</logger>
<logger name="com.myapp" level="DEBUG">
<appender-ref ref="debug" />
</logger>
तो संक्षेप में प्रस्तुत करने के लिए:
- स्प्रिंग लकड़हारा
- मुख्य -> त्रुटि
- डिबग -> डीबग
- com.myapp लकड़हारा
- मुख्य - > जानकारी
- डिबग -> डीबग
पर्याप्त ठीक छोटाबीजवाला नहीं है।
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<filter class="com.myapp.ThresholdLoggerFilter">
<logger>org.springframework</logger>
<level>ERROR</level>
</filter>
</appender>
निम्नलिखित कोड काम करता है
package com.myapp;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
public class ThresholdLoggerFilter extends Filter<ILoggingEvent> {
private Level level;
private String logger;
@Override
public FilterReply decide(ILoggingEvent event) {
if (!isStarted()) {
return FilterReply.NEUTRAL;
}
if (!event.getLoggerName().startsWith(logger))
return FilterReply.NEUTRAL;
if (event.getLevel().isGreaterOrEqual(level)) {
return FilterReply.NEUTRAL;
} else {
return FilterReply.DENY;
}
}
public void setLevel(Level level) {
this.level = level;
}
public void setLogger(String logger) {
this.logger = logger;
}
public void start() {
if (this.level != null && this.logger != null) {
super.start();
}
}
}
सरल और साफ जवाब !! यह उदाहरण मेरी ज़रूरतों के लिए बिल्कुल सही था !!! – araknoid
स्वयं को लागू करने की कोई आवश्यकता नहीं है, ch.qos.logback.classic.filter का उपयोग करें।थ्रेसहोल्डफ़िल्टर –
थ्रेसहोल्डफ़िल्टर बस थ्रेसहोल्ड पर फ़िल्टर करता है। मैं एक लॉगर और थ्रेसहोल्ड –