java - 自定义 OutputStreamAppender 未运行 : LOGBACK: No context given for <MYAPPENDER>

标签 java logging logback appender

我希望在 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/

相关文章:

c# - Windows Phone 8 开发 - 日志记录和 IOC 设计模式

java - Logback无法在控制台写入

logging - 玩Logback只显示类 'play.Logger$ALogger'

java - 删除和替换 java 方法

java - Android 相机,内部列表选项?

java - 不要用 if else 比较两个值

java - 在 MATLAB 中,我可以将 java boolean 值转换为 MATLAB 逻辑值吗?

java - 查找 logback.xml 中配置的所有 logback 附加程序,即使未附加到任何记录器

javascript - 将 console.log 分配给另一个对象(Webkit 问题)

logback - Logback 中的条件功能如何工作?