logging - 如何在 WSO2 ESB 中的每个服务日志中选择主机名

标签 logging log4j wso2 pattern-layout wso2-esb

我正在 WSO2 ESB 中根据其 official 制作每个服务日志关联。布局转换模式工作正常,但没有获取“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}] 不起作用。

最佳答案

我注意到 log4j 转换模式中默认使用的 hostip MDC 条目(对于 ERROR_LOGFILE、SERVICE_APPENDER...appender)在 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>

但这只是一种解决方法,我对更好的解决方案感兴趣

关于logging - 如何在 WSO2 ESB 中的每个服务日志中选择主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27938128/

相关文章:

java - Log4j线程名称混淆

windows - Windows 上 tomcat 7 生产中的 log4j 路径

api - WSO2 API 管理器支持 API 联合吗?

WSO2IS-Q : Can Claims be Transformed or Computed

wso2 - 嵌套迭代调解器在 WSO2 esb 中不起作用

python - 使用 Flask 应用程序时,使用 print 会对性能产生负面影响吗?

linux - 过滤日志并将输出实时发送到新文件

java - 我注意到 log4j2.xml 中某些属性前面的前缀 'sd:'——它们代表什么?

javascript - Chrome/Firefox console.log 总是附加一行 'undefined'

java - 我是否需要在我的所有类中都有一个 Logger 的静态实例来实现 log4j?