Wildfly 10日志自定义:添加主机名字段至Logstash输出
无需新增模块,通过XML配置添加主机名与自定义字段的方案
嘿,很高兴看到你已经在WildFly 10 + Logstash的日志集成上走了这么远!其实完全不用新增额外模块,直接通过WildFly的日志子系统XML配置(比如standalone.xml或domain.xml)就能给LogstashFormatter添加主机名字段和自定义字段,我之前帮不少朋友处理过类似需求,下面给你具体的实现步骤:
核心思路:利用LogstashFormatter的自定义属性配置
jboss-logmanager-ext里的LogstashFormatter本身就支持通过<property>标签直接添加自定义字段,不管是主机名这种动态获取的值,还是固定的自定义标识都能实现,完全不需要额外引入模块。
1. 添加主机名字段
Docker容器的主机名可以通过环境变量HOSTNAME获取,或者WildFly自身的系统属性jboss.host.name,你可以在Formatter配置里直接引用这些值。
2. 添加自定义字段
同样用<property>标签,指定字段名和对应的值即可,值可以是固定字符串、系统属性或者环境变量。
具体XML配置示例
找到你WildFly配置文件里的日志子系统部分(通常在<subsystem xmlns="urn:jboss:domain:logging:3.0">下),修改或新增LogstashFormatter的配置:
<subsystem xmlns="urn:jboss:domain:logging:3.0"> <formatters> <custom-formatter name="LOGSTASH" class="org.jboss.logmanager.formatters.LogstashFormatter"> <!-- 基础配置(你已有的部分,比如日期格式等) --> <property name="dateFormat" value="yyyy-MM-dd'T'HH:mm:ss.SSSZ"/> <!-- 添加主机名字段:这里用Docker容器的HOSTNAME环境变量 --> <property name="field.hostname" value="${env.HOSTNAME}"/> <!-- 或者用WildFly的主机名属性 --> <!-- <property name="field.hostname" value="${jboss.host.name}"/> --> <!-- 添加自定义字段:比如应用标识 --> <property name="field.app_name" value="my-wildfly-app"/> <!-- 再比如环境标识 --> <property name="field.environment" value="production"/> </custom-formatter> </formatters> <!-- 记得把这个formatter关联到对应的handler,比如console-handler或者file-handler --> <console-handler name="CONSOLE"> <formatter name="LOGSTASH"/> </console-handler> </subsystem>
关键说明
- 字段名的格式是
field.xxx,其中xxx就是你要在Logstash里接收的字段名(比如上面的hostname、app_name) - 如果你需要引用系统属性或环境变量,直接用
${属性名}的格式即可,WildFly会自动解析 - 不需要新增任何模块,因为你已经部署了
jboss-logmanager-ext-1.0.0.Alpha5.jar,这个jar已经包含了LogstashFormatter的所有功能
验证方法
修改完配置后,重启WildFly容器,然后查看日志输出,你应该能看到JSON格式的日志里新增了hostname、app_name等字段,直接被Logstash接收处理就行。
内容的提问来源于stack exchange,提问作者Aliiiiiiii
相关产品推荐
相关产品推荐

