将 API 日志限制在更少的环境中

问题描述 投票:0回答:1

我正在将 API 日志从 MuleSoft CloudHub 发送到 Datadog。我可以通过对应用程序的 log4j2.xml 进行必要的更改来发送日志。我们有多个 MuleSoft 环境,例如 DEV、TEST、UAT 和 Prod。我不想将所有环境的日志发送到 Datadog,并且希望仅限于 UAT 和 Prod。我在哪里可以进行这种过滤? datadog 摄入网址(https://http-intake.logs.datadoghq.eu/api/v2/logs)是否有任何特定的查询参数,我可以在其中指定是否需要为环境发送日志?

例如,使用下面的 Datadog API,我可以发送日志。

curl --location 'https://http-intake.logs.datadoghq.eu/api/v2/logs?host=localhost&ddsource=Mulesoft&service=TestApp&ddtags=test' \
--header 'DD-API-KEY: a37607ff-112a-4dde-b4b3-ded433f2e2c3' \
--header 'Content-Type: application/json' \
--data '{
    "Test1": "Test-08JUL24"
}'

我确实看到了这个:有没有办法在开发环境下禁用datadog的日志收集?,但还没有成功

logging mule log4j2 mulesoft datadog
1个回答
0
投票

可能有多种方法可以实现它。其中一种方法是使用运行时属性动态设置

level
下的
AppenderRef
AsyncRoot
。 假设您想将日志发送到 datadog 以进行生产,而对于 qa,您想将其发送到其他某个附加程序,您可以配置如下所示的 log4j2.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Configuration status="INFO" name="cloudhub" packages="com.mulesoft.ch.logging.appender">
    <Appenders>
        <Http name="DataDog">
            ...
        </Http>
        <SomeOtherAppender name="NonProd"
                .....
        </SomeOtherAppender >
    </Appenders>

    <Loggers>
        <AsyncRoot level="INFO">
            <AppenderRef ref="DataDog" level="${sys:logging.appenders.datadog.level:-trace}" /> 
            <AppenderRef ref="NonProd" level="${sys:logging.appenders.nonprod.level:-trace}" />
        </AsyncRoot>
    </Loggers>
</Configuration>

这将执行的操作是在设置 datadog 附加程序时查找运行时属性

logging.appenders.datadog.level
,如果未找到,则它将设置为
trace
(因为表达式
${sys:logging.appenders.nonprod.level:-trace}
)。对于其他记录器也是如此。换句话说,这些 apender 的默认行为是记录从信息到跟踪的所有级别。

现在,您在部署时为非产品环境设置

logging.appenders.datadog.level=off

注意:该参数只需设置为运行时属性,如果将其放入应用程序的 yaml 文件中,则该参数将不起作用。这是因为记录器在读取应用程序的 yaml 之前初始化。

© www.soinside.com 2019 - 2024. All rights reserved.