gpt4 book ai didi

java - 如何在 Java 中更改 Saxon 的标准错误输出流?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:16 25 4
gpt4 key购买 nike

我正在使用 Saxon 9 在 Java 中执行 XSL 转换。如果在转换过程中出现错误,Saxon 会将输出定向到运行它的 JVM 的标准错误流。我的 Java 应用程序具有用于标准输出和错误的日志记录机制。我如何强制 Saxon 使用我的错误输出流而不是 JVM 默认错误输出流?

最佳答案

Saxon 将错误转移到 javax.xml.transform.ErrorListener目的。最初这些对象中有一个将异常写入 stderr 的默认对象,但您可以轻松地创建一个新的 ErrorListener 对象并实现其 warningerrorfatalError 方法,将它们发送到您的自定义日志记录机制。

如何设置新的ErrorListener取决于whether you are using the JAXP interface or the s9api interface .对于 JAXP 接口(interface),您可以在 Transformer 对象上调用 setErrorListener。对于 s9api 接口(interface),您可以在创建处理器时提供的 Configuration 对象、XsltCompiler 对象或 XsltTransformer 对象上提供 setErrorListener 方法。无论如何,周围有几个。

像这样的东西(s9api):

final PrintStream logFile =
new java.io.PrintStream("errorlog.txt"); // for example

Configuration configuration = new Configuration();
configuration.setErrorListener(new ErrorListener() {
@Override
public void warning(TransformerException exception) throws TransformerException {
exception.printStackTrace(logFile); // or wherever
}

@Override
public void error(TransformerException exception) throws TransformerException {
exception.printStackTrace(logFile);
}

@Override
public void fatalError(TransformerException exception) throws TransformerException {
exception.printStackTrace(logFile);
}
});
Processor proc = new Processor(configuration);
...

如果您不想在程序中使用 stderr,最好使用 System.setErr 在程序范围内重定向它:

System.setErr(new java.io.PrintStream("errorlog.txt"));

它需要一个 PrintStream对象,您可以将其包装在任何类型的输出/流中,因此我确信它可以用于您的自定义日志记录机制。

关于java - 如何在 Java 中更改 Saxon 的标准错误输出流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15396409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com