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

Java 如何从FOP禁用strerr日志记录输出?,java,apache-fop,Java,Apache Fop,如何禁用FOP在处理FO文件时自动生成的日志输出(通常发送到stderr) 我尝试将log4j.properties文件放在类路径中,更改org.apache.fop的日志级别,但这不起作用。不知道fop,但使用如下代码,您可以随时将STDERR重定向到您喜欢的位置: File errDumpFile = new File("Path\to\a\File") FileOutputStream fos = new FileOutputStream(errDumpFile); PrintStream

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


我尝试将
log4j.properties
文件放在类路径中,更改
org.apache.fop
的日志级别,但这不起作用。

不知道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

我在fop文档中找到一个提示:“我们已切换[…]到雅加达公共日志记录”。您的
log4j.properties
可能没有效果,因为它们使用的是commons日志

这在我的情况下有效:

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


)

您可以这样做:

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

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

发件人:

用法:

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用于包含完全限定的类名。
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());