在我的用例中,我需要将日志消息发送到我的Azure Log Analytics帐户。我当时想利用HTTP Appender和Log Analytics REST API的优势。
主要问题是REST API需要一些值(例如签名),这些值必须在运行时计算才能接受日志请求。
如此处报道: https://docs.microsoft.com/it-it/azure/log-analytics/log-analytics-data-collector-api
身份验证标头必须采用以下格式:
Authorization: SharedKey <WorkspaceID>:<Signature>
签名=
StringToSign = VERB + "\n" +
Content-Length + "\n" +
Content-Type + "\n" +
x-ms-date + "\n" +
"/api/logs";
i.e.: POST\n1024\napplication/json\nx-ms-date:Mon, 04 Apr 2016 08:00:00 GMT\n/api/logs
Signature=Base64(HMAC-SHA256(UTF8(StringToSign)))
这基本上就是我配置http附加程序的方式:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="DEBUG">
<Appenders>
<Http name="HttpAppender" url="https://sharedkey.ods.opinsights.azure.com/api/logs?api-version=2016-04-01" method="POST">
<Property name="Accept" value="application/json" />
<Property name="Log-Type" value="SafeClient" />
<Property name="Authorization" value="{message_signature}" />
<Property name="x-ms-date" value={current_date} />
</Http>
<Async name="asyncHttp" bufferSize="1000" includeLocation="true">
<AppenderRef ref="HttpAppender" />
</Async>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="asyncHttp" />
</Root>
</Loggers>
</configuration>
如何通过代码注入{message_signature}和{current_date}?每次调用logger.info ... debug ...错误...。
这是实施此解决方案的最佳,最简单的可行方法吗?还是让我实现我的自定义附加程序?