撒克逊人将错误转移到 javax.xml.transform.ErrorListener对象.最初,这些对象中有一个默认对象,它会将异常写入stderr,但是您可以轻松创建新的ErrorListener对象并实现其warning,error和fatalError方法,以将它们发送到自定义日志记录机制.
如何设置新的ErrorListener取决于whether you are using the JAXP interface or the s9api interface.对于JAXP接口,可以在Transformer对象上调用setErrorListener.对于s9api接口,在创建处理器时,XsltCompiler对象或XsltTransformer对象上可以提供Configuration对象上的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对象,您可以将其包装在任何类型的输出/流中,因此我确定它可以用于您的自定义日志记录机制.