Log4j2 динамически внедряет свойство из кода - PullRequest
0 голосов
/ 04 сентября 2018

В моем случае мне нужно отправить сообщения журнала в мою учетную запись Azure Log Analytics. Я хотел воспользоваться преимуществами HTTP Appender и REST API Log Analytics.

Основная проблема заключается в том, что 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-appender:

<?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 ... error ....

Это лучший и самый простой способ реализовать это решение? или я должен реализовать свой собственный appender?

...