Java 关闭到控制台的Saxon输出
当我们使用Saxon时,有时会将输出输出到控制台,如: 第2行第6列的警告 在{\n\t\t\t\t确实\n\t\t\t\t\t测试}中: 表达式正在查找名为“true”的子元素-可能true()是 预定的要避免此警告,请使用child::true或./true。 第2行第6列的警告 在{…备选方案}中: 该表达式正在查找名为“false”的子元素-可能是false() 预定的要避免此警告,请使用child::false或./false 有没有办法关掉这个?是否还有一种方法可以将它提供给我们正在使用的log4j/log4net实例 我们创建了一个编译器,如下所示(我们在code-Java和.NET中执行XPath 2.0查询): 我不能给出日志文件名,因为我们希望它出现在我们正在创建的log4j/log4net日志中。这些可能是一个文件,但也可能是很多其他东西,我们希望它能够转到用户配置的任何日志侦听器Java 关闭到控制台的Saxon输出,java,.net,saxon,Java,.net,Saxon,当我们使用Saxon时,有时会将输出输出到控制台,如: 第2行第6列的警告 在{\n\t\t\t\t确实\n\t\t\t\t\t测试}中: 表达式正在查找名为“true”的子元素-可能true()是 预定的要避免此警告,请使用child::true或./true。 第2行第6列的警告 在{…备选方案}中: 该表达式正在查找名为“false”的子元素-可能是false() 预定的要避免此警告,请使用child::false或./false 有没有办法关掉这个?是否还有一种方法可以将它提供给我们正在
有办法吗?这些消息被发送到注册的
ErrorListener
,调用其warning()
方法。对于独立的XPath计算,这将是注册到配置中的ErrorListener
。您可以通过以下几种方式重定向:
(a) 您可以编写自己的ErrorListener
,它可以做任何它想做的事情(可能通过对标准的子类化)
(b) 您可以使用配置注册StandardErrorListener
,并调用其setLogger()
方法将其输出重定向到您自己的net.sf.saxon.lib.Logger
(可能是调用log4j的实现)
(c) 您可以继续使用StandardErrorListener
使用的StandardLogger
,但将其输出重定向到不同的PrintStream
不幸的是,尽管XSLT和XQuery允许在单个转换或查询级别对其进行控制,但对于独立的XPath,它必须是配置范围的
事后思考
我应该提到,也可以使用配置选项FeatureKeys来抑制这些特定警告。抑制XPATH\u警告
这些消息被发送到注册的ErrorListener
,调用其warning()
方法。对于独立的XPath计算,这将是注册到配置中的ErrorListener
。您可以通过以下几种方式重定向:
(a) 您可以编写自己的ErrorListener
,它可以做任何它想做的事情(可能通过对标准的子类化)
(b) 您可以使用配置注册StandardErrorListener
,并调用其setLogger()
方法将其输出重定向到您自己的net.sf.saxon.lib.Logger
(可能是调用log4j的实现)
(c) 您可以继续使用StandardErrorListener
使用的StandardLogger
,但将其输出重定向到不同的PrintStream
不幸的是,尽管XSLT和XQuery允许在单个转换或查询级别对其进行控制,但对于独立的XPath,它必须是配置范围的
事后思考
我应该提到,也可以使用配置选项FeatureKeys来抑制这些特定警告。抑制\u XPATH\u警告
以下是一个示例实现,自Saxon 9.9.0-1:定义NullErrorListener以来有效:
设置此ErrorListener的方法是:
Processor processor = new Processor(false);
processor.setConfigurationProperty(net.sf.saxon.lib.Feature.ERROR_LISTENER_CLASS,
NullErrorListener.class.getName());
下面是一个示例实现,自Saxon 9.9.0-1:定义NullErrorListener以来有效:
设置此ErrorListener的方法是:
Processor processor = new Processor(false);
processor.setConfigurationProperty(net.sf.saxon.lib.Feature.ERROR_LISTENER_CLASS,
NullErrorListener.class.getName());
Bug ATE-1221(内部注释)那么您如何使用Saxon,我想您需要共享相关代码,以允许其他人就如何重定向消息提出建议。当然,那个特别的警告告诉你如何避免它。将标准错误输出文件
列为instance@MartinHonnen-我在上面添加了代码。提供文件名对我们来说不太合适,因为我们希望将这些警告发送到log4j/log4net流,而log4j/log4net流可能不是文件。Bug ATE-1221(内部注释)那么您如何使用Saxon,我想您需要共享相关代码,以允许其他人就如何重定向消息提出建议。当然,那个特别的警告告诉你如何避免它。将标准错误输出文件
列为instance@MartinHonnen-我在上面添加了代码。提供文件名对我们来说不太合适,因为我们想将这些警告发送到log4j/log4net流,而log4j/log4net流可能不是一个文件。您能给我举一个如何实现选项a或b的示例吗?我想我可以将消息发送到我们的log4j记录器。谢谢-daveCould你能给我举一个如何实施选项a或b的例子吗?我想我可以将消息发送到我们的log4j记录器。谢谢-戴夫
Processor processor = new Processor(false);
processor.setConfigurationProperty(net.sf.saxon.lib.Feature.ERROR_LISTENER_CLASS,
NullErrorListener.class.getName());