美文网首页
性能优化— log.debug()日志打印

性能优化— log.debug()日志打印

作者: 小胖学编程 | 来源:发表于2024-01-31 12:11 被阅读0次

有一种想法,实现Log的Filter,将命中特殊规则的所有级别日志打印出来(即使是debug日志,以便于我们能够详细的排查信息)。【log日志】根据自定义规则,打印出特定日志

但是debug打印详细日志时,即使debug的日志不打印,依旧会执行toJson的操作,存在性能问题。

解决方案有如下几种:

  1. 方案一:打印日志前,需要判断日志级别。写起来较为繁琐
if(logger.isDebugEnabled()) { 
  logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
  1. 方案二:使用占位符,以及Object对象的toString()方法
logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);

但需要注意的是:下面这种写法依旧会优先执行toJson的方法。

log.debug("{}" , objectMapper.writeValueAsString(something));
  1. 【推荐】方案三:适配器模式,增强toString()方法
public class LogJson {

    private static final ObjectMapper MAPPER = new ObjectMapper(new JsonFactory()
            .disable(INTERN_FIELD_NAMES));

    private final Object object;

    public static Object of(Object object) {
        return new LogJson(object);
    }

    LogJson(Object object) {
        this.object = object;
    }

    @Override
    public String toString() {
        if (object == null) {
            return "null";
        }
        try {
            return MAPPER.writeValueAsString(object);
        } catch (Exception e) {
            return object.toString();
        }
    }
}

日志打印:

log.info("{}",LogJson.of(user));

相关文章

网友评论

      本文标题:性能优化— log.debug()日志打印

      本文链接:https://www.haomeiwen.com/subject/wuzoodtx.html