从JSON日志获取唯一ID

时间:2015-04-14 07:59:32

标签: java json log4j

我正在让我自己的Appender说MyAppender。 我的日志文件包含不同的JSON对象,如

{
Id =""
------
-----
------
}

我的log4j.xml中的PatternLayout就像

<prop key ="log4j.appender.MYLOG.layout">org.apache.log4j.Patternlayout</prop>
<prop key ="log4j.appender.MYLOG.layout.ConversionPattern">"%m%n"</prop>

附加方法

append(LoggingEvent loggingEvent){

 }

我主要担心的是:

LoggingEvent如何处理仅包含JSONObjects的日志文件的日志文件为{obj1} {obj2} {obj3} {obj4}。它会同时采用单个对象还是整个日志文件。

根据我的理解,LoggingEvent将生成整个日志。所以我正在尝试的是我最初定义为List<LoggingEvent> loggingEventList = new ArrayList();

的appender

我已将append(LoggingEvent event)修改为

append(LoggingEvent event){
loggingEventList.add(event);
} 

所以我关心的是这是否会将JSON对象作为List中的单个条目?

1 个答案:

答案 0 :(得分:0)

您可以使用jackson库

来完成此操作
String s="{\"Id\": 200,\"Employee\": {\"Name\": \"ABC\"}}";
ObjectMapper mapper=new ObjectMapper();
JsonNode readTree = mapper.readTree(s);
System.out.println(readTree.get("Id"));

JsonNode jsonNode = readTree.get("Employee");
JsonParser parser=mapper.getJsonFactory().createJsonParser(jsonNode.toString());
Employee readValue = mapper.readValue(jsonNode, Employee.class);

System.out.println(readValue.getName());

为此,您需要jackson-core-asljackson-mapper-asl个库,请务必使用最新版本。

我刚刚提供了一个示例代码片段,介绍如何从Json String中提取节点对象详细信息,现在您需要做的是,在您的append方法中从事件获取Json String并实现我的代码片段以获取Id和你想要的其他对象。如果你再次陷入困境,试试这个。

我可以舀勺,但我不会

希望这有帮助!

祝你好运!