功能背景
在生产环境查看接口耗时很重要,如果是大批量的接口调用,还需要给接口耗时进行排序,以方便查看某段时间内接口的耗时情况,本文是在以ELK做日志收集的前提下,以JSON格式输出日志,来实现接口耗时的排序功能。
代码实现
1. 日志工具类
工具类中使用ThreadLocal来保证多线程输出日志时的安全。
package demo.utils;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class JsonLog {
private static final JsonLog jsonLog = new JsonLog();
private static final ThreadLocal<Map<Object, Object>> jLog = ThreadLocal.withInitial(HashMap::new);
public static JsonLog get() {
return jsonLog;
}
/**
* 添加日志
* 将日志全部以字符串格式输出,用于兼容ELK日志收集
* ELK收集日志注意:日志避免出现 [字符串 + 数字 + json] 的情况
*/
public JsonLog addText(Object key, Object val) {
if (val instanceof String) {
return jsonLog.append(key, val