首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JSON中格式化java注销以便在ELK Stack中使用

在JSON中格式化java注销以便在ELK Stack中使用
EN

Stack Overflow用户
提问于 2016-07-27 17:09:52
回答 2查看 1.7K关注 0票数 4

我正在尝试以JSON格式输出我的记录器,这样我就可以消除在我的ELK堆栈中使用过滤器的需要。这看起来确实很管用。

这是我有的东西

代码语言:javascript
复制
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.json.simple.JSONObject; 

public class MyApp {

   static Logger logger = LoggerFactory.getLogger(MyApp.class);

   @SuppressWarnings("unchecked")
   public static void main(String[] args) {
      // TODO Auto-generated method stub
      JSONObject obj = new JSONObject();
      JSONObject obj2 = new JSONObject();


      obj.put("name","foo");
      obj.put("num",new Integer(100));
      obj.put("balance",new Double(1000.21));
      obj.put("is_vip",new Boolean(true));

      obj2.put("ob2name","bar");
      obj2.put("ob2num",new Integer(200));

      obj.put("names", obj2);


      logger.info("{}", obj);

   }

}

输出到我的file.log

代码语言:javascript
复制
{"@timestamp":"2016-07-27T17:51:08.331+01:00","@version":1,"thread_name":"main","logger_name":"MyApp","level":"INFO","level_value":20000,"HOSTNAME":"gman","message":"{\"names\":{\"ob2num\":200,\"ob2name\":\"bar\"},\"balance\":1000.21,\"is_vip\":true,\"num\":100,\"name\":\"foo\"}"}

输出到日志存储控制台

代码语言:javascript
复制
{
     "@timestamp" => "2016-07-27T16:51:08.331Z",
       "@version" => 1,
    "thread_name" => "main",
    "logger_name" => "MyApp",
          "level" => "INFO",
    "level_value" => 20000,
       "HOSTNAME" => "gman",
        "message" => "{\"names\":{\"ob2num\":200,\"ob2name\":\"bar\"},\"balance\":1000.21,\"is_vip\":true,\"num\":100,\"name\":\"foo\"}",
           "host" => "gman",
           "path" => "C:\\apps\\dots\\logs\\file.log"
}

我的问题

消息似乎是以字符串的形式输出的--如何将其输出为JSON,这样Elasticsearch就可以提取各个字段并对它们进行索引,以便它们可以被搜索?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-27 17:28:18

在Logstash的conf文件中,添加json过滤器:

代码语言:javascript
复制
filter {
    json {
        source => message
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-04-18 14:25:35

或者使用Map并做一些如下的思考:

代码语言:javascript
复制
Map<String, Object> map = new HashMap<>();
map.put("system", "fedora");
logger.info(Markers.appendEntries(map), "Hello world");

代码语言:javascript
复制
{
  "message" : "Hello world",
  "system" : "fedora"
}

(默认字段省略)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38619277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档