请教大家一个问题,我现在再用 jackson 的 writeValueAsString 作为 Log.基本上就是一股脑的
如果是 list ,那我就要
for(Item item: list){
log.info("[函数名] 信息: {}", mapper.writeValueAsString(item));
}
要么是 map 就,没办法这个 jackson 有个 checked exception 。。。必须这样处理。
map.forEach((key,value)->{
try{
log.info("[函数名] 信息: {}", mapper.writeValueAsString(item));
}catch(JsonProcessingException e){
throw new RuntimeException(e);
}
})
然后我就觉得很烦,也妨碍阅读。但没有 log 是不行的,aop 也不行,因为我不是想出入参 log ,是中间的某些重要变量也要 log ,但不重要的就不 log ,所以只能手动。
我主要就是想请教有没有大佬如何抽象出这个 map 的那个 tryCatch JsonProcessingException 那部分,只保留
log.info("[函数名] 信息: {}", mapper.writeValueAsString(item))
作为一个 consumer 。我试着自己写了,但是 consumer.accept 那里好像说不能处理 JsonProcessingException, 因为 consumer 自己是不抛出这个 exception 的。
意象之中希望是这样的
listFunc(list, ()->log.info("[函数名] list item: {}");)
还有就是
mapFunc(map, ()->log.info("[函数名] map key = {}, value = {}");)
或者大佬有没有好的见解让我看看如何打 log.
你可能觉得为什么不直接整个 list 进去一个 log:
log.info("[函数名], 信息: {}", mapper.writeValueAsString(list)).
一来就是方便阅读。另外就是怕这个 list 或者 map 里面的东西很多,以前试过用 toString 或者 Gson ,然后东西多的时候直接就 stackoverflow. 还有就是处理循环引用方面似乎也方便。
谢谢大家。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.