Как выбрать имя хоста в журналах Per service в WSO2 ESB

Я делаю Per service Logs в WSO2 ESB по их официальной ссылке. Шаблон преобразования макета работает нормально, но не принимает "HostName". Я не знаю, в чем проблема, WSO2 использует сам этот шаблон в файле "log4j.properties". Но это не работает в журналах обслуживания.

Примечание: я использую WSO2 ESB 4.8.1

Конфигурации в файле "log4j.properties":

# Seperate LOG File for MyService Service
log4j.category.SERVICE_LOGGER.MyService=INFO, MyService_PROXY_APPENDER
log4j.additivity.SERVICE_LOGGER.MyService=false
log4j.appender.MyService_PROXY_APPENDER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MyService_PROXY_APPENDER.File=logs/MyService-service.log
log4j.appender.MyService_PROXY_APPENDER.datePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.MyService_PROXY_APPENDER.layout=org.apache.log4j.PatternLayout
log4j.appender.MyService_PROXY_APPENDER.layout.ConversionPattern=[%d{ISO8601}] - %5p - [%X{host}] - %c{1} - %n

Это создает отдельный файл журнала и регистрирует следующий вывод.

Выход:

[2015-01-14 12:37:34,063] -  INFO - [] - MyService - 

Проблема:

Остальные спецификаторы преобразования работают нормально, но [%X{host}] не работает.

1 ответ

Решение

Я заметил, что записи host и ip MDC, используемые по умолчанию в шаблонах преобразования log4j (для ERROR_LOGFILE, SERVICE_APPENDER, ... appenders), не инициализируются в 4.8.1

Обходной путь может состоять в том, чтобы инициализировать значение хоста самостоятельно, с помощью этого сценария в начале вашего посредничества, например:

    <script language="js"><![CDATA[
        importPackage(Packages.java.net);
        importPackage(Packages.org.apache.log4j);
        try {
            var addr = InetAddress.getLocalHost();
            if (addr != null) {
                var hostname = addr.getHostName();
                MDC.put("host", hostname);
            }
        } catch (e) {
        }
    ]]></script>

Но это всего лишь обходной путь, и я заинтересован в лучшем решении

Другие вопросы по тегам