gpt4 book ai didi

javascript - Log4j2 路由附加器 JavaScript 配置错误

转载 作者:行者123 更新时间:2023-11-29 19:07:27 24 4
gpt4 key购买 nike

我正在使用 lombok 的 log4j2 记录器,我需要根据 ThreadContext 映射配置路由附加程序。路由键由脚本确定。这是整个 log4j2.xml 配置文件:

<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%highlight{%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %c{1}: %msg%n%throwable}"/>
</Console>

<RollingFile name="GeneralRollingFile" filename="log/test-log.log"
filepattern="log/test-log-%d{yyyy-MM-dd HH:mm:ss}.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %c{1}: %msg%n%throwable"/>
<Policies>
<SizeBasedTriggeringPolicy size="25 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>

<Routing name="Routing">

<Routes>
<Script name="RoutingInit" language="JavaScript">
<![CDATA[
if (logEvent.getContextMap().containsKey("operation-1")) {
return "operation-1";
} else if (logEvent.getContextMap().containsKey("operation-2")) {
return "operation-2";
} else {
return "general";
}
]]>
</Script>

<Route key="general" ref="GeneralRollingFile"/>

<Route key="operation-1">
<RollingFile name="operation-1-rolling"
fileName="log/operation-1/${ctx:operation-1}.log"
filePattern="log/operation-1/${ctx:operation-1}-%d{yyyy-MM-dd HH:mm:ss}.log">

<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %c{1}: %msg%n%throwable"/>
<Policies>
<SizeBasedTriggeringPolicy size="25 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Route>

<Route key="operation-2">
<RollingFile name="operation-2-rolling"
fileName="log/operation-2/${ctx:operation-2}.log"
filePattern="log/operation-2/${ctx:operation-2}-%d{yyyy-MM-dd HH:mm:ss}.log">

<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %c{1}: %msg%n%throwable"/>
<Policies>
<SizeBasedTriggeringPolicy size="25 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Route>

</Routes>


</Routing>

</Appenders>

<Loggers>
<Root level="trace" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="Routing"/>
</Root>
</Loggers>

但是,我收到以下错误:

 main ERROR Error running script RoutingInit javax.script.ScriptException: <eval>:2:24 Invalid return statement
return "operation-1";

Log4j2 文档为我们提供了一个类似的脚本示例,但它对我不起作用。我对 JS 相当陌生,但这段代码似乎是一个有效的脚本。我是不是搞错了什么?

提前致谢。

最佳答案

(声明:我从来没有使用过 log4j2,也没有在 Java 中嵌入 Javascript 等。无论如何,我在尝试回答你的问题时环顾四周......)

是不是很像https://stackoverflow.com/a/38034571/118587

从这个意义上说,如果我正确理解他们的建议,如果它不是函数,则不应使用 return ,而返回的值将是最后一个表达式的值,所以(没有检查)我可以猜测并说以下内容会起作用:

        <Script name="RoutingInit" language="JavaScript">
<![CDATA[
var ret = "general";
if (logEvent.getContextMap().containsKey("operation-1")) {
ret = "operation-1";
} else if (logEvent.getContextMap().containsKey("operation-2")) {
ret = "operation-2";
}
ret;
]]>
</Script>

关于javascript - Log4j2 路由附加器 JavaScript 配置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41790290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com