自定义 OutputStreamAppender 未运行:LOGBACK:没有为 <MYAPPENDER>

问题描述 投票:0回答:2

我希望在

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已实例化。但没有例外意味着它永远不会被调用。

这可能与我不理解的错误消息有关:“LOGBACK:没有为测试提供上下文。MyAppender [null]”

这是什么意思以及如何解决?

java logging logback appender
2个回答
0
投票

你会如何设置文件名你想写的地方,当你扩展

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();
  }

}

0
投票

抱歉,这是我的错:我忘记在

<root>
标签中设置自定义附加程序。

© www.soinside.com 2019 - 2024. All rights reserved.