我尝试将我的日志发布到stdout。这工作正常,但我必须将其重写为.json格式。
我尝试使用以下内容: (在github)上找到了这个想法
<Appenders>
<Console name="stdout" target="SYSTEM_OUT">
<LogStashJSONLayout>
<!-- Example of what you might do to add fields, warning values should be known to be json escaped strings -->
<KeyValuePair key="application_name" value="${sys:application.name}"/>
<KeyValuePair key="application_version" value="${sys:application.version}"/>
<KeyValuePair key="environment_type" value="${sys:deploy_env}"/>
<KeyValuePair key="cluster_location" value="${sys:cluster_location}"/>
<KeyValuePair key="cluster_name" value="${sys:cluster_name}"/>
<KeyValuePair key="hostname" value="${sys:hostname}"/>
<KeyValuePair key="host_ip" value="${sys:host_ip}"/>
<!--Example of using system property substitution -->
<KeyValuePair key="application_user" value="${sys:user.name}"/>
<!--Example of using environment property substitution env:USERNAME on windows-->
<KeyValuePair key="environment_user" value="${env:USER}"/>
</LogStashJSONLayout>
</Console>
但这不起作用。我在纯文本中看到我登录stdout。 像这样:
please check your split expression
Processing bucket : entityresolution-datasets
Splitter returned no results. If this is not expected, please check your split expression
Processing bucket : mesos-exhibitors3bucket-10oeaynyppkt7
Splitter returned no results. If this is not expected, please check your split expression
Processing bucket : process-log
Splitter returned no results. If this is not expected, please check your split expression
Processing bucket : segmentation-datasets
Splitter returned no results. If this is not expected, please check your split expression
所以我想以LogStashJSONLayout格式使用我的logstash输出并打印到控制台而不是使用套接字发布它。
答案 0 :(得分:2)
我遇到了同样的问题,但最终找到了符合我需求的解决方案。 我在我的应用程序中使用了JSONLayout.java file on Github。
我将文件添加到包中的src / main / java文件夹(例如com.example.log4j2),我的log4j2 xml文件如下所示:
<Configuration packages="com.example.log4j2" verbose="false">
<Appenders>
<Console name="stdout" target="SYSTEM_OUT">
<JSONLayout>
</JSONLayout>
</Console>
</Appenders>
...
<Loggers>
...
<AsyncRoot level="WARN">
<AppenderRef ref="stdout" />
</AsyncRoot>
</Loggers>
让我知道这是否适合你。我对包的名称和@Plugin(name = ...)进行了一些更改,所以我可能搞砸了。