如何在log4j2.xml中编写ScriptFilter?

u3r8eeie  于 2022-12-29  发布在  其他
关注(0)|答案(1)|浏览(228)

我在编写ScriptFilter时遇到了一些麻烦,因为Internet/StackOverflow上的资源相当有限。我希望社区中的人能够指导我:)
我希望根据部署应用程序的环境过滤掉某些日志。我们通过在Jenkins构建作业的Bash脚本中设置SPRING_ARGS_PORT来配置环境,如下所示:

export SPRING_ARGS_PORT="--server.port=$PORT --env=dev1"

在上面的Bash脚本中,我们将应用程序部署到dev1环境。
然后使用java -jar application.jar --SPRING_ARGS_PORT=$SPRING_ARGS_PORT运行应用程序jar文件。
我编写的log4j2.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">

<Console name="prodOutput" target="SYSTEM_OUT">
        <PatternLayout pattern="..."/>
        <Filters>
            <ScriptFilter onMatch="DENY" onMismatch="NEUTRAL">
            <Script name="checkLoggerOutType" language="JavaScript"><![CDATA[
                var value = "${env:SPRING_ARGS_PORT}";
                var envIndex = value.indexOf("--env=");
                if (envIndex >= 0 && value.substring(envIndex + "--env=".length) == "dev1") {
                    return true;
                } else {
                    return false;
                }
            ]]></Script>
        </ScriptFilter>
        </Filters>
</Console>

</configuration>

我尝试完成的是在环境为“dev 1”(如SPRING_ARGS_PORT中所定义)时过滤掉日志,但这似乎不起作用,因为我仍然看到日志
有人能帮我指出我做错了什么或错过了什么吗?谢谢:)
我在编写ScriptFilter语法时引用的StackOverflow帖子如下:

我猜我得到了正确的语法比较这两个职位,也许我的逻辑是错误的,或者我错过了什么?

dgjrabp2

dgjrabp21#

我算出来了,JavaScript代码应该写为:

<Script name="checkLoggerOutType" language="JavaScript"><![CDATA[
    var value = "${env:SPRING_ARGS_PORT}";
    var envIndex = value.indexOf("--env=");
    if (envIndex >= 0 && value.substring(envIndex + "--env=".length) == "dev1") {
        true;
    } else {
        false;
    }
]]></Script>

注意,不同之处在于布尔值不应该返回,它们应该被清楚地写出来。
这种格式在我引用的第一篇StackOverflow文章中就已经很清楚了,但是我忽略了这个小细节。
希望这对任何可能正在考虑为log4j使用ScriptFilter的人有帮助

相关问题