長い研究の末、私はこのような問題を解決しました。私はデバッグに私のログレベルを設定し、実際にアペンダを作成したカスタムアペンダを書いて、設定やメッセージ
@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());
これは長い手順です。しかし、それは私のために働いた。長い研究の後、私はこれを思いついた。私は、もしあればこれを行うためのより良い、簡単な方法を探しています。
注:このコードを目的に応じてさまざまなブログからコピーしました。