SLF4J/Logback의 멋진 "마커"기능이 매우 유용합니다. 콘솔에 모든 경고/오류뿐만 아니라 특별한 "상태"메시지를 기록하려고한다고 가정 해보십시오. 당신은 클래스를 가질 수
은 다음과 같이 로그인을 수행합니다
public class MyClass {
private static final Marker status = MarkerFactory.getMarker("STATUS");
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
public void doSomething() {
logger.info(status, "Beginning");
logger.info("Regular info log");
logger.warn("Warning");
logger.info(status, "Done");
}
}
그런 다음, logback.xml, 당신은 모든 경고 메시지는 "상태"표시 보여 필터 : 기본적으로
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>STATUS</marker>
</evaluator>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>NEUTRAL</OnMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
을, 당신은 로거의 레벨을 DEBUG로 설정하여 의 모든 것이 appender로 이동 한 다음 appender에서 추가로 filtering을 사용하여 찾고있는 정확한 라인을 얻습니다. 서로 다른 클래스에 대해 로깅 수준을 다르게하려고하면 좀 더 까다로울 수 있지만 Logback은 필터가 많은 유연성을 제공합니다 (필요한 경우 사용자 고유의 필터를 만들 수도 있습니다).
나는 그렇게 할 수 없다고 생각합니다. 메시지에 로그 수준을 지정해야하며 로그 수준이 해당 수준이나 높은 로그 수준으로 설정된 경우에만 표시됩니다. 어쨌든 로그를 남길 수는 없습니다. 앞에서 말했듯이, 가장 낮은 레벨 인 FATAL을 제외하고는 의미 상 올바르지 않습니다. – drublik
라이브러리 등에서 악용 될 수 있기 때문에 그것이 잘못되었다는 것을 알고 있었고 로깅 프레임 워크는 쓸모가 없었습니다. 하지만 여전히 그런 종류의 기능이 필요합니다. "올바른"방법이 있어야합니다. –
당신이 당신의 질문에 대답 한 것처럼 들립니다. Java 코드 내에서 WARN 수준의 일부 메시지를 기록하여 개발 중에 로그인되지만 프로덕션에서는 로그되지 않도록해야합니다. 항상 로그 할 다른 메시지입니다. 따라서 동일한 로거를 사용하는 경우 프로덕션 환경에서 최소한 ERROR 레벨로 로그해야합니다. 낮은 수준 (예 : ALL)으로 메시지를 기록하고 모든 환경에서 메시지를 표시하려면 다른 로거가 필요합니다. – palimpsestor