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

时间:2010-03-31 13:18:40

标签: java apache-fop

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

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

4 个答案:

答案 0 :(得分:7)

这可能会迟到,但在1.1版本中你可以创建一个实现EventListener的类。在processEvent中,您可以忽略任何您不想看到的消息。

来自FOP Docs

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

<强>用法:

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

答案 1 :(得分:2)

我在fop文档中找到了一个提示:http://xmlgraphics.apache.org/fop/0.95/embedding.html#basic-logging说“我们已经将[...]切换到了Jakarta Commons Logging”。您的log4j.properties可能无效,因为他们正在使用公共记录。

这适用于我的情况:

<logger name="org.apache.fop">
    <level value="info" />
    <appender-ref ref="logfile" />
    <appender-ref ref="stdout" />
</logger>

检查您的commons日志记录配置,发现过程是否可以找到log4j( http://commons.apache.org/logging/guide.html#Configuration

答案 2 :(得分:1)

您可以这样做:

org.apache.commons.logging.impl.Log4JLogger log = (org.apache.commons.logging.impl.Log4JLogger) LogFactory.getLog("org.apache.fop");

log.getLogger().setLevel(org.apache.log4j.Level.FATAL);

答案 3 :(得分:0)

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

File errDumpFile = new File("Path\to\a\File")
FileOutputStream fos = new FileOutputStream(errDumpFile);
PrintStream ps = new PrintStream(fos);
System.setErr(ps);

注意:您不必重定向到文件,PrintStream可以使用OutputStream