我在编写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帖子如下:
我猜我得到了正确的语法比较这两个职位,也许我的逻辑是错误的,或者我错过了什么?
1条答案
按热度按时间dgjrabp21#
我算出来了,
JavaScript
代码应该写为:注意,不同之处在于布尔值不应该返回,它们应该被清楚地写出来。
这种格式在我引用的第一篇StackOverflow文章中就已经很清楚了,但是我忽略了这个小细节。
希望这对任何可能正在考虑为log4j使用
ScriptFilter
的人有帮助