java日志到ES索引的字段细化

1 篇文章 0 订阅
订阅专栏

目录

一、是什么

二、怎么办

1、JSON Message

2、Log Parser

3、JSON Layout

三、推荐用法


一、是什么

        java日志收集到ES索引,由message字段对应一整行日志 拆分为多个字段对应一行日志的过程叫做java日志到ES索引的字段细化。

        

 字段细化前

message一个字段对应一整行日志

字段细化后

 使用action,appId,elapsed,level,logKey,loggerName等多个字段对应一行日志

 字段分类说明。

引擎字段表示通过log4j或logback配置而来的。

线程字段表示在一个线程内记录多条日志,这些字段的值应该是一致的。

行字段表示一个线程内记录多条日志,这些字段的值不一定是一样的。

二、怎么办

1、JSON Message

原理

特点

日志记录过程中实现

不能保证所有的日志都是json格式

会有两种日志文件 普通+json

案例

1:定义一个logModel对象

public class LogModel implements Serializable {

	/**
	 * 应用名称
	 */
	private String app;
	/**
	 * 请求链路traceID
	 */
	private String traceId;
	/**
	 * 执行时长
	 */
	private int elapse;
	/**
	 * 日志来源,自定义  default、es、redis、scheduler、mq、db、等等
	 */
	private String source = DefaultDataEnums.Source.DEFAULT.getStatus();
	/**
	 * 执行动作  add、del、update、query
	 */
	private String action;
	 
    ......
}

2:定义LogUtil类

@Slf4j
public class XLogUtil {

    public static void info(String message,String app,...){
         LogModel logModel = new LogModel();
         logModel.setApp(app);
         ......
         log.info(JsonUtil.toJson(logModel))
    }
    ......

}

3:修改日志配置文件,以log4j2为例

<?xml version="1.0" encoding="UTF-8"?>
<configuration >
   
    <RollingRandomAccessFile name="jsonLogAsyncAppender"
                                 fileName="json.log" ......>
         <PatternLayout>
                <Pattern>%m%n</Pattern>
         </PatternLayout>
    </RollingRandomAccessFile>
    <!--分两种日志,json日志和普通日志-->
    <loggers>
        <AsyncLogger name="LogUtil" level="info" additivity="false">
            <appender-ref ref="jsonLogAsyncAppender"/>
        </AsyncLogger>

        <AsyncRoot level="info">
            <appender-ref ref="Console"/>
            <appender-ref ref="stringLogAsyncAppender"/>
        </AsyncRoot>
    </loggers>
</configuration>

2、Log Parser

原理

特点

日志收集过程中实现

处理各种非结构化数据

3、JSON Layout

原理

特点

日志记录过程中实现

log4j2、logback内核支持

引擎字段不用关心、线程字段统一处理、行字段单独处理

案例

1:增加LoggerWrapper类实现日志记录前后业务处理

@Data
public class LoggerWrapper implements Logger {

    protected Logger log;
    public LoggerWrapper(Logger log) {
        this.log = log;
    }
    protected void prepare() {    }

    protected void finish() {    }
    @Override
    public String getName() {
        return log.getName();
    }
    @Override
    public boolean isInfoEnabled() {
        return false;
    }
    @Override
    public void info(String msg) {
        try {
            prepare();
            log.info(msg);
        } finally {
            finish();
        }
    }
    @Override
    public void info(String format, Object arg) {
        try {
            prepare();
            log.info(format, arg);
        } finally {
            finish();
        }
    }
    //......覆盖所有方法
}

2:定义LogProxy存放行字段(也可以是线程字段)并继承LoggerWrapper

@Data
public class LogProxy extends LoggerWrapper {
    private String traceId;
    private String userId;
    private String app;
    private Object request;
    private Object response;
    private String source;
    private String action;
    private Long elapsed = 0L;

    public LogProxy(Logger log) {
        super(log);
    }

    @Override
    protected void prepare() {
        if (log == null) {
            throw new RuntimeException("log 不能为空");
        }
        if (traceId != null) {
            MDC.put("traceId", traceId);
        }
        if (userId != null) {
            MDC.put("userId", userId);
        }
        if (app != null) {
            MDC.put("appId", appId);
        }
        ......
    }
    @Override
    protected void finish() {
        if (traceId != null) {
            MDC.remove("traceId");
        }
        if (userId != null) {
            MDC.remove("userId");
        }
        if (app != null) {
            MDC.remove("appId");
        }
        ......

    }
    public LogProxy app(String app) {
        this.app = app;
        return this;
    }
    public LogProxy request(Object request) {
        this.request = request;
        return this;
    }
    ......
}

3:定义LogUtil类

@Slf4j
public class LogUtil {

    public static LogProxy log(Logger log) {
        LogProxy logProxy = new LogProxy(log);
        return logProxy;
    }
}

4:拦截器统一处理线程字段

public class LogInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        MDC.put("traceId", traceId);
        MDC.put("userId", userId);
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        MDC.clear();
    }
}

5:xml配置(以log4j2为例)

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" >
    <RollingRandomAccessFile name="jsonLogAsyncAppender"
                    immediateFlush="false" append="true" ......>
            <JsonLayout locationInfo="true" properties="false">
                <KeyValuePair key="traceId" value="$${grace:${ctx:trace}}"/>
                <KeyValuePair key="app" value="$${grace:${ctx:app}}"/>
                <KeyValuePair key="userId" value="$${grace:${ctx:userId}}"/>              
                <KeyValuePair key="source" value="$${grace:${ctx:source}}"/>
                <KeyValuePair key="action" value="$${grace:${ctx:action}}"/>
                <KeyValuePair key="request" value="$${grace:${ctx:request}}"/>
                <KeyValuePair key="response" value="$${grace:${ctx:response}}"/>
                ......
                <Compact>true</Compact>
                <EventEol>true</EventEol>
                <StacktraceAsString>true</StacktraceAsString>
                <Charset>UTF-8</Charset>
            </JsonLayout>
            .....
        </RollingRandomAccessFile>
</configuration>

6:日志记录方式

  log.info("message........");
  LogUtil.log(log).source("mysql").action("query").....info("message....")

三、推荐用法

java使用elasticsearch分组进行聚合查询过程解析
08-25
主要介绍了java使用elasticsearch分组进行聚合查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
springBoot整合kafka和elasticSearch,实现批量拉取日志以及批量更新到es
01-15
从Kafka中批量拉去数据,然后批量更新到es里。一次拉取的数量可以设置,现在是10000,轻松运转,更新到es内部也是,目标是百万日志秒处理
Nodejs实现自动清理elasticsearch过期索引(日志清理)
02-17
该篇文章源码:Nodejs实现自动清理elasticsearch过期索引(日志清理)--学习笔记 http://blog.csdn.net/gzy11/article/details/55260615
Java如何使用elasticsearch进行模糊查询
08-25
主要介绍了Java如何使用elasticsearch进行模糊查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
springboot项目查询es中的日志内容
04-21
自己系统配置了切面将所需操作数据存入elasticSearch后,使用java进行查询操作es,从而查看筛选日志。前端采用的是layUi,进行简单的筛选和展示
Logstash 只将 Java 错误日志写入 es 索引
panbuhei
08-05 828
此文档中包含一个 Logstash 加载多个配置文件和只输出 Java 错误日志的配置文件。
filebeat采集日志es并通过java读取日志
kay
09-29 2880
1.日志格式 不同的日志格式需要不同的解析方式,这里的日志格式为时间开头的内容,我们就根据每个时间开头来分割日志日志形式如下: 2021-09-30 14:21:31.962 [http-nio-50003-exec-9] ERROR com.elco.spring.advice.ExceptionAdvice - 业务异常 com.elco.core.exception.BusinessException: 该编码不存在 at com.elco.eam.maindata.service.Dict
Java 泛型的使用,日志ES
weixin_45739956的博客
08-30 592
优化后的代码 @Data public class InvokeRequest { /** * 请求地址 */ private String url; /** * 请求接口名称 */ private String interfaceName; /** * 请求参数 */ private Object request; /** * 请求方法 */ private St
java 写入es一个实现步骤指南
wb1597063760的博客
09-19 187
Java 写入 ES,可以使用 Elasticsearch 的 Java API 来实现。Java 写入 ES,可以使用 的 Java API 来实现。
ES(Elasticsearch)日志类型
m0_54849806的博客
03-25 2703
每个软件应用为了方便排查运行时出现的问题或者一些做一些数据记录,都会提供相应的日志记录,Elasticsearch也不例外,Elasticsearch日志记录通过3类日志类型进行记录: **(1)主要日志(cluster-name.log)😗*记录了Elasticsearch运行时所发生一切的综合信息,例如,某个查询失败或一个新的节点加入集群 **(2)慢搜索日志(cluster-name_index_search_slowlog.log)😗*当某个查询运行得很慢时,Elasticsearch会在这里进行记
J-ES-Reindex:用于重新索引 Elasticsearch 索引Java 命令行工具
06-13
J-ES-Reindex Java Command Line tool for reindexing Elasticsearch Indices$ java -jar J-ES-Reindex.jar ---------------------------------Elasticsearch Java Reindex tool v0.5------------------------------...
基于Java的Elasticsearch全文搜索引擎设计源码
03-28
Elasticsearch全文搜索引擎源码:包含49个文件,使用JavaJavaScript、HTML和CSS技术开发,基于Elasticsearch构建网站日志处理系统,通过数据同步工具等开源组件快速构建日志处理系统,适合网站日志分析和数据检索...
logstash 收集解析日志文件到ES集群
qq_36374805的博客
07-10 8948
    一般情况下,对于日志的解析和分析,是比较费心费时的一件事,但是借助logstash和es可以快速的把相关的日志文件解析后导入到es进行后期的日志分析和排错。下面就一般的流程作为说明,以供参考准备材料:日志文件,es集群 logstash安装文件步骤一: 1) 因为logstash是基于Java开发的,相关的运行需要jvm支持,因此,在需要在日志文件所在的机器上 需要安装Java并配置相关...
告别恼人的NPE,日志分片,畅快的将日志信息埋入ES的设计方案
战斗小火鸡
07-02 362
关于CAT和ES的相关知识本文不做具体展开,各位自行去查阅资料了解吧。 1、问题场景 待埋点的信息为一个复杂对象中的比较深层次的字段,不希望做太多的非空判断 处理的主流程为一条日志,主流程中会多次调用第三方服务,需要将调用信息埋点生成子的日志,并进行主流程日志和子的调用日志的串联。 日志埋点通过cat写入es。 支持同步or异步的埋点。 建立一套规范的错误码的体系,并能够自动防重(多人协同开发时候防止另一个人也建立了一个相同的错误码),并且能够自动生成错误码的映射关系提供给产品or业务,便于他们
Java连接ES的多种方式
dkjhl的博客
03-13 4656
本篇文章主要介绍,使用Basic、Transport、Kerberos三种方式连接ES,脚本为Java
Elasticsearch集群,java操作es
mr-yhl的博客
11-07 1548
今日内容 集群和分布式 Elasticsearch集群 Elasticsearch客户端 java代码取操作ES有三种方式 1、es提供的原生的操作方式 在es 8.0后会移除 2、es提供的rest风格的操作方式 3、SpringDataElasticSearch的方式 第一章 集群和分布式集群和分布式的概念有联系也有区别,我们一起来看。 1. 单点式服...
ES (Elasticsearch)入门指南
花语无痕的博客
01-23 1766
版权声明:原创文章 欢迎参考 请勿抄袭 https://blog.csdn.net/aA518189/article/details/86064737 &amp;lt;/div&amp;gt; &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://csdnimg.cn/release/phoenix/temp...
针对日志产生上报到es的实践
weizainaiping的博客
09-28 1201
背景 日志检索是在服务治理中用来快速定位错误的一个主要方式,在没有日志检索服务之前,都是需要通过获取相应的日志来进行排查定位。这是一个传统的方式。 为了更快地提升排查效率,现在市场上出现了很多关于日志检索的框架,比较常见的是ELK的搭建方式。 在这里面logStash是相对比较重的软件,目前针对日志,采用filebeat来替换采集。 遇到问题 因为elasticsearch是使用json格式来持久化文档,为了更好地控制日志检索的效果,我们需要特别的处理日志上报的json内容,同时也可以减少在fil
进阶2 探索图形化编程:扩展图形组件与切片开发的魅力
最新发布
优树搭的博客
05-30 1252
当这些切片成功地通过图形程序串联起来后,在后续进行程序升级或维护时,大家会惊喜地发现,图形程序就如同清晰的路标一般,可以非常便捷地通过图形程序准确地定位到相关切片,并对这些切片进行在线查看、编辑和执行等操作。而且,这些切片的代码长度通常不会太长,相比传统开发的代码,阅读起来要容易得多,这无疑会给系统后续的工作带来极大的便利。
java操作es索引添加字段
04-22
1. 连接到Elasticsearch服务器; 2. 创建一个索引和类型; 3. 使用Java API创建一个“mapping”(即字段定义); 4. 将mapping应用于索引中的类型。 下面是一个示例代码片段,展示了如何使用Java API来创建一个索引...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

分类专栏

  • java 1篇

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

2022年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司新余网站推广方案价格杭州企业网站建设价格那曲网站定制推荐洛阳网站改版推荐白山百度网站优化开封网络广告推广报价萍乡百度网站优化排名报价诸城网站改版价格大同网站seo优化丽江百度网站优化排名推荐昌吉seo优化多少钱宝安营销型网站建设多少钱白城网站建设设计价格长春seo排名推荐白银英文网站建设眉山网站搭建德州SEO按天计费多少钱绵阳网络营销多少钱合肥营销网站茂名推广网站呼和浩特网站改版民治英文网站建设雅安SEO按天收费哪家好怒江百姓网标王推广推荐贺州网站推广多少钱民治模板网站建设上饶网站优化排名哪家好温州SEO按天收费推荐张掖网站优化按天收费哪家好黄石百度关键词包年推广价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化