如何为XSLT中的<xsl:message>设置调试级别以控制日志输出?
实现Apache FOP中xsl:message的日志级别控制
要实现按调试级别过滤xsl:message输出,核心思路是给日志标记级别,再通过外部传入的全局参数做条件判断,具体步骤如下:
1. 给日志标记级别
给每个xsl:message对应的日志内容标记级别,直接在条件判断中指定数值,或者用变量统一维护:
<!-- 必要日志,级别2 --> <xsl:if test="$debug-level >= 2"> <xsl:message>参数校验通过,开始生成文件</xsl:message> </xsl:if> <!-- 详细调试日志,级别10 --> <xsl:if test="$debug-level >= 10"> <xsl:message>当前处理的节点ID:<xsl:value-of select="@id"/></xsl:message> </xsl:if>
如果需要统一维护级别值,可定义全局变量:
<xsl:variable name="log-level-essential" select="2"/> <xsl:variable name="log-level-debug" select="10"/> <xsl:if test="$debug-level >= $log-level-essential"> <xsl:message>文件生成任务初始化完成</xsl:message> </xsl:if>
2. 定义全局调试级别参数
在XSLT的<xsl:stylesheet>标签内定义全局参数,默认值设为生产环境常用的低级别:
<xsl:param name="debug-level" select="2"/>
3. 在Apache FOP调用时传入级别参数
Java代码调用场景
通过FOUserAgent设置参数,值可从配置文件、环境变量或系统参数动态读取:
FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI()); FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); // 生产环境传2,调试环境传10 foUserAgent.setParameter("debug-level", "10"); // 后续生成AFP/PDF的逻辑...
命令行调用场景
使用-param参数传入调试级别:
# 生成PDF,仅输出必要日志(级别2) fop -xml input.xml -xsl style.xsl -pdf output.pdf -param debug-level 2 # 生成AFP,输出所有日志(级别10) fop -xml input.xml -xsl style.xsl -afp output.afp -param debug-level 10
4. 可选优化:日志分级标识
给不同级别的日志添加前缀,方便快速识别:
<xsl:if test="$debug-level >= 2"> <xsl:message>[LEVEL 2] 必要日志:文件生成开始</xsl:message> </xsl:if> <xsl:if test="$debug-level >= 10"> <xsl:message>[LEVEL 10] 调试日志:当前处理节点内容:<xsl:copy-of select="."/></xsl:message> </xsl:if>
这样就能实现生产环境只输出必要日志、调试环境输出全量日志的需求,避免日志过载。
内容的提问来源于stack exchange,提问作者Pooja
相关产品推荐
相关产品推荐

