如何禁用 FOP 在处理 FO 文件时自动生成的日志输出(通常发送到 stderr)?
我尝试log4j.properties
在类路径中放置一个文件,更改日志级别,org.apache.fop
但这没有奏效。
如何禁用 FOP 在处理 FO 文件时自动生成的日志输出(通常发送到 stderr)?
我尝试log4j.properties
在类路径中放置一个文件,更改日志级别,org.apache.fop
但这没有奏效。
这可能晚了,但在 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;
}
}
}
用法:
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());
我在 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 )
你可以这样做:
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);
不知道 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
.