我正在将 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的日志收集?,但还没有成功
可能有多种方法可以实现它。其中一种方法是使用运行时属性动态设置
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 之前初始化。