我希望在 OutputStreamAppender
的基础上编写自定义 appender .我写了下面的类
package tests;
import java.io.IOException;
import java.io.OutputStream;
import ch.qos.logback.core.OutputStreamAppender;
public class MyAppender<E> extends OutputStreamAppender<E> {
public MyAppender() {
System.out.println("MyAppender created");
setOutputStream(new OutputStream() {
@Override
public void write(int b) throws IOException {
throw new UnsupportedOperationException();
}
});
}
}
然后我写了下面的运行者:
package tests;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Logger;
public class Runner {
private static final Logger log = (Logger) LoggerFactory.getLogger(Runner.class);
public static void main(String[] args) {
//log.addAppender(new MyAppender<ILoggingEvent>());
log.info("Hello world");
}
}
最后我写了下面的logback.xml
:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} - %msg%n</pattern>
</encoder>
</appender>
<appender name="MYAPPENDER" class="tests.MyAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
得到如下输出:
MyAppender created
LOGBACK: No context given for tests.MyAppender[null]
20:45:29.957 [main] INFO Runner - Hello world
表示appender被实例化了。但没有异常(exception)意味着它永远不会被调用。
可能这与我不理解的错误消息有关:“LOGBACK:没有为测试提供上下文。MyAppender [null]”
这是什么意思以及如何解决?
最佳答案
你如何设置文件名你想写的地方当你扩展OutputStreamAppender
时还有很多其他问题我宁愿扩展FileAppender(outputsteamappender的实习扩展)并覆盖写入方法以执行自定义任务。
public class MyAppender<E> extends FileAppender<E> {
@Override
protected void writeOut(E event) throws IOException {
/**if (prudent) {
safeWrite(event);
} else {
super.writeOut(event);
} */
throw new UnsupportedOperationException();
}
}
关于java - 自定义 OutputStreamAppender 未运行 : LOGBACK: No context given for <MYAPPENDER>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29374139/