Log4J2의 메시지 변환기를 사용자 정의하는 방법
나는 이미 Log4J를 사용한 지 여러 해가 되었다.그것은 기능이 강한 로그 라이브러리로 효율적이고 고도로 맞춤형 제작이 가능하다.기능을 쉽게 확장하고 메시지를 기록하기 전에 사용자 정의 작업을 수행할 수 있습니다.이 문서에서 Log4J2에 사용자 정의 변환기를 만드는 방법을 보여 드리겠습니다. 너무 많은 잡담을 하지 않아도 됩니다.
변환기란?
Log4J2에는 메시지를 기록할 때 호출되는 여러 구성 요소가 있습니다.너는 실제 기록기가 있으니, 원시 메시지로 그것을 호출해라.그게 문제야.정보 또는.경고 전화 발생.기록기에는 하나 이상의 부가기가 있다.이 appender는 로그 이벤트를 통해 호출되는 것으로 매우 유용합니다. 필요하면 여러 위치에서 같은 정보를 기록할 수 있기 때문입니다.예를 들어, 컨트롤러에 appender를 사용하고, 파일에 쓰기 위해 다른 appender를 사용할 수 있습니다.만약 기록기를 두 개의 appender를 동시에 사용하도록 설정한다면, 매번 한 개의 호출만 필요합니다.info (), 로그 기록을 두 개의 appender에 의뢰합니다.
다음은 포석이다.메시지를 기록하는 실제 형식을 지정하는 여러 가지 레이아웃을 사용할 수 있습니다.여기에 여러 개의 '변환기' 를 정의했습니다. 레이아웃은 모든 변환기를 호출하여 메시지의 일부분을 포맷하고 필요한 데이터를 추가합니다.날짜 변환기, 이상 변환기, 메시지 변환기 등이 있습니다.여기에 기록된 메시지를 포맷할 수 있도록 코드를 삽입할 것입니다.
Log4J2에서 컬러 텍스트를 인쇄하는 방법
본문에서, 우리는 메시지를 기록하는 서로 다른 단어를 돋보이게 하는 변환기를 만들 것이다.log4j 프로필에서 단어 목록을 직접 설정할 것입니다.이것은 단지 간단한 예일 뿐입니다. 변환기는 로그의 민감한 요소를 차단하거나 코드 줄을 어떤 방식으로 포맷하는 등 더욱 강력한 기능에 사용할 수 있습니다.
그러나 간단하게 보기 위해 일부 단어의 색깔을 청색으로 바꿀 것이다.이를 위해서는 사용자 정의 변환기가 필요합니다.LogEventPatternConverter 클래스를 확장합니다.또한 @plugin 주석을 사용하여 플러그인으로 표시해야 합니다. (이름과 종류도 제공합니다.) 변환기 키를 정의해야 합니다.이것들은 PatternLayout에서 변환기를 식별하는 데 사용될 것이다.모드가 해석되고 변환기 키가 식별될 때 로그 이벤트를 변환기에 의뢰합니다.네, 원하시면 열쇠를 얼마나 가지고 싶으세요?
@Plugin(name = "highlight", category = PatternConverter.CATEGORY)
@ConverterKeys({"color", "colormsg"})
public class HighlightConverter extends LogEventPatternConverter {
}
지금 우리는 구조 함수를 제공해야 한다.구조기는 로그에 강조하고 싶은 단어 목록을 얻을 것입니다.복제품이 없는지 확인하기 위해서 우리는 한 세트를 만들 수 있다.체인의 하류에서 모든 내용을 정확하게 초기화할 수 있도록 슈퍼 () 를 호출합니다.Log4j2 문서를 보면 변환기는 실제적으로 newInstance () 방법이 필요합니다. 문자열 그룹을 매개 변수로 하고 변환기의 옵션을 표시합니다.이 예에서, 옵션은 우리의 단어 목록이지만, 변환기를 정확하게 초기화하는 데 필요한 모든 내용일 수 있습니다.@Plugin(name = "highlight", category = PatternConverter.CATEGORY)
@ConverterKeys({"color", "colormsg"})
public class HighlightConverter extends LogEventPatternConverter {
private static final String NO_COLOR = "\u001B[0m"; // No color for Windows
private static final String HIGHLIGHT_COLOR = "\u001B[96m"; // Cyan for Windows
private Set<String> words;
private HighlightConverter(Set<String> words) {
super("HighlightConverter", null);
this.words = words;
}
public static HighlightConverter newInstance(String[] options) {
return new HighlightConverter(new HashSet<>(Arrays.asList(options)));
}
}
현재 우리는 구조 함수를 정의하고 돋보이게 할 단어를 준비했으며, 메시지를 수정해야 한다.모든 Log4j2 변환기는 append () 방법을 실행해야 합니다.이 메서드는 LogEvent와 문자열 생성기를 수신하며 메시지가 첨부되어야 합니다.LogEvent에는 키워드를 검색하고 강조 표시된 버전으로 바꿀 수 있는 로깅된 메시지가 포함되어 있습니다.최종 버전은 다음과 같습니다.@Plugin(name = "highlight", category = PatternConverter.CATEGORY)
@ConverterKeys({"color", "colormsg"})
public class HighlightConverter extends LogEventPatternConverter {
private static final String NO_COLOR = "\u001B[0m";
private static final String HIGHLIGHT_COLOR = "\u001B[96m";
private Set<String> words;
private HighlightConverter(Set<String> words) {
super("HighlightConverter", null);
this.words = words;
}
public static HighlightConverter newInstance(String[] options) {
return new HighlightConverter(new HashSet<>(Arrays.asList(options)));
}
@Override
public void format(LogEvent event, StringBuilder toAppendTo) {
String logMessage = event.getMessage().getFormattedMessage();
for (String word:words) {
logMessage = logMessage.replaceAll(word, HIGHLIGHT_COLOR + word + NO_COLOR);
}
toAppendTo.append(logMessage);
}
}
Log4J2에서 사용자 정의 변환기 사용
우리는 변환기를 준비했지만, Log4j2에 그것을 사용하라고 어떻게 알려줍니까?우리는 두 가지 물건이 필요하다.우선, Log4J에 우리의 변환기 종류가 포함되어 있다는 것을 알려야 한다.이는 구성에 변환기가 들어 있는 패키지를 추가하여 수행됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" packages="com.ppopescu">
</Configuration>
다음은 패턴 레이아웃이 있는 appender를 정의합니다. (이 예는 컨트롤러 appender입니다.)메시지에 대해, 우리는 정의된 변환 키를 사용합니다.% m (메시지를 기록하는 표준 변환 키) 이 아니라% color 또는% colormsg를 사용합니다.단지 이 점을 추가하는 것만으로는 아무런 이익이 없다. 왜냐하면 우리는 어떤 단어를 돋보이게 할 것인지를 지정하지 않았기 때문이다.우리는 변환기에 파라미터를 추가해야 한다.이것은 {param} 문법으로 완성된 것입니다. 우리는 우리가 필요로 하는 임의의 수량을 가질 수 있습니다.다음은 사용자 정의, 강조 표시 및 단어를 강조 표시하는 예제 구성입니다.<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" packages="com.ppopescu">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level - %color{custom}{highlight}{words}%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
결론
모든 로그 기록의 요구를 충족시키기 위해 맞춤형 메시지 변환기를 정의하기 쉽다.그것을 사용하여 단어를 돋보이게 하는 것은 매우 쉽지만, 변환기 자체는 훨씬 복잡할 수 있으며, 예를 들어 차단, 코드 형식, 또는 네가 생각할 수 있는 모든 것을 만족시킬 수 있다.사용자 정의 부가기나 사용자 정의 레이아웃을 구축하는 데도 비슷한 방법을 사용할 수 있다.
내 개인 사이트Building a custom converter in Log4j2의 완전한 출처와 오리지널 문장
Reference
이 문제에 관하여(Log4J2의 메시지 변환기를 사용자 정의하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pazvanti/how-to-make-a-custom-message-converter-for-log4j2-p0p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)