Log4j2从代码动态注入属性

时间:2018-09-04 08:15:05

标签: azure http analytics log4j2 appender

在我的用例中,我需要将日志消息发送到我的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 ...错误...。

这是实施此解决方案的最佳,最简单的可行方法吗?还是让我实现我的自定义附加程序?

0 个答案:

没有答案