오랜 연구 끝에 나는 이와 같은 문제를 해결했다. 내가 디버그 내 로그 레벨을 설정하고 실제로 펜더를 생성 한 사용자 정의 펜더를 쓰고 설정하고 메시지
@Plugin(name = "TestAppender", category = "Core", elementType = "apender", printObject = true)
public class TestAppender extends AbstractAppender {
private List<String> messages = new ArrayList<String>();
protected TestAppender(String name, Filter filter, Layout<? extends Serializable> layout) {
super(name, filter, layout);
}
@Override
public void append(LogEvent event) {
getMessages().add(event.getMessage().toString());
}
public static TestAppender createAppender(@PluginAttribute("name") String name,
@PluginElement("Layout") Layout<? extends Serializable> layout,
@PluginElement("Filter") final Filter filter,
@PluginAttribute("otherAttribute") String otherAttribute) {
if (name == null) {
LOGGER.error("No name provided for TestAppender");
return null;
}
if (layout == null) {
layout = PatternLayout.createDefaultLayout();
}
return new TestAppender(name, filter, layout);
}
public List<String> getMessages() {
return messages;
}
public void setMessages(List<String> messages) {
this.messages = messages;
}
}
를 기록 얻을 여기
<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test" status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="log4j.test.Log4jTest" level="debug">
<AppenderRef ref="Console"/>
</Logger>
<Root level="debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
의 src 싶습에 TST 및 특성 파일에 사용자 정의 펜더를 추가
내 실제 시험에서, 나는 초기화 설정 방법
@Before
public void setUp() {
org.apache.logging.log4j.core.Logger logger = (org.apache.logging.log4j.core.Logger) LogManager.getRootLogger();
PatternLayout layout = PatternLayout.createLayout("%d{HH:mm:ss.SSS} [%t] %-5level %logger{1} - %msg%n%ex",
null, null, null, Charset.forName("GBK"), false, true, null, null);
testAppender = TestAppender.createAppender("TestAppender", layout, null, "true");
testAppender.start();
logger.getContext().getConfiguration().addLoggerAppender(logger, testAppender);
}
의 펜더를 부착하고이 방법을 주장했다.
assertEquals(Level.DEBUG, LogManager.getRootLogger().getLevel());
assertEquals(
"[Request headers: [{key: one, values: [one1, one2]}, {key: two, values: []}, {key: three, values: [three]}]]",
testAppender.getMessages().toString());
이것은 긴 절차입니다. 그러나 그것은 나를 위해 일했습니다. 오랜 연구 끝에 나는 이것을 생각해 냈다. 나는 이것이 있으면 더 쉽게 그리고 더 쉬운 방법을 찾고 있습니다.
참고 : 본인의 목적에 따라 다양한 블로그에서이 코드를 복사했습니다.