将xsl:消息重定向到log4j

问题描述:

我正在使用SaxonJ从Java执行XSLT转换。将xsl:消息重定向到log4j

我的XSLT文件必须输出任何调试/信息作为输出,因为我的转换逻辑很复杂。

有没有办法让我可以重定向到log4j,以便我可以将转换信息存储在日志文件中?

我的系统已经使用log4j将输出记录到文件。我想追加转换调试消息。

任何想法?

我很确定您已经找到了如何执行此操作。但我希望我的回答对其他人有用。

所有你需要做的就是实现MessageListener接口:http://www.saxonica.com/documentation/javadoc/net/sf/saxon/s9api/MessageListener.html

public class MessageListenerImpl implements MessageListener { 
    private static Logger logger = Logger.getLogger(MessageListenerImpl.class); 

    public void message(XdmNode content, boolean terminate, SourceLocator locator) { 
     if (terminate) { 
      logger.error(content.getStringValue()); 
      System.exit(1); 
     } else { 
      logger.warn(content.getStringValue()); 
     } 
    } 
} 

您可以配置您自己的信息发射器。有各种不同的接口要做到这一点,例如参见

http://www.saxonica.com/documentation/javadoc/net/sf/saxon/lib/FeatureKeys.html#MESSAGE_EMITTER_CLASS

或有在s9api XsltTransformer类简单的接口。

+0

任何实例或MESSAGE_EMITTER_CLASS的使用环节。我无法在线找到用法/示例。 我相信这是你如何设置配置 - http://www.saxonica.com/documentation/javadoc/net/sf/saxon/Configuration.html#setMessageEmitterClass%28java.lang.String%29,但你如何实例化配置类? – nija

+0

表面下方总会有一个配置。例如,如果您使用JAXP,则可以从net.sf.saxon.TransformerFactoryImpl获取它,或者如果您使用XQJ,则可以从SaxonXQDataSource获取它。 –