如何禁用FOP的strerr日志记录输出?

Phi*_*ham 7 java apache-fop

如何在处理FO文件时禁用FOP自动生成的日志输出(通常发送到stderr)?

我已经尝试log4j.properties在类路径中放置一个文件,更改日志级别,org.apache.fop但这没有用.

Phi*_*yNJ 7

这可能很晚,但在1.1版本中你可以创建一个实现的类EventListener.在processEvent您可以简单地忽略您不想看到的任何消息.

来自FOP文件:

import org.apache.fop.events.Event;
import org.apache.fop.events.EventFormatter;
import org.apache.fop.events.EventListener;
import org.apache.fop.events.model.EventSeverity;

/** A simple event listener that writes the events to stdout and stderr. */
public class SysOutEventListener implements EventListener {

    /** {@inheritDoc} */
    public void processEvent(Event event) {
        String msg = EventFormatter.format(event);
        EventSeverity severity = event.getSeverity();
        if (severity == EventSeverity.INFO) {
            System.out.println("[INFO ] " + msg);
        } else if (severity == EventSeverity.WARN) {
            System.out.println("[WARN ] " + msg);
        } else if (severity == EventSeverity.ERROR) {
            System.err.println("[ERROR] " + msg);
        } else if (severity == EventSeverity.FATAL) {
            System.err.println("[FATAL] " + msg);
        } else {
            assert false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

StreamSource strm = new StreamSource(new File(fo));
OutputStream outStream = new BufferedOutputStream(new FileOutputStream(new File(pdfName)));
Fop fop = _fopFactory.newFop(org.apache.xmlgraphics.util.MimeConstants.__Fields.MIME_PDF, outStream);
FOUserAgent foUserAgent = fop.getUserAgent();
foUserAgent.getEventBroadcaster().addEventListener(new SysOutEventListener());
Run Code Online (Sandbox Code Playgroud)


Yan*_*eve 0

不知道 FOP,但您始终可以使用如下代码将 STDERR 重定向到您喜欢的位置:

File errDumpFile = new File("Path\to\a\File")
FileOutputStream fos = new FileOutputStream(errDumpFile);
PrintStream ps = new PrintStream(fos);
System.setErr(ps);
Run Code Online (Sandbox Code Playgroud)

注意:您不必重定向到文件,PrintStream可以采用任何OutputStream.