网易首页 > 网易号 > 正文 申请入驻

从 0 到 1,看我玩弄千万日志于股掌

0
分享至

程序员的工作离不开日志。

日志就像一个笔记本,可以记录程序运行时的一些信息。

日志文件

通过日志,我们可以做很多事情。

日志的作用

1.记录系统和接口的使用情况,比如请求日志

2.记录和分析用户的行为,比如网站访问日志

3.调试程序,和控制台的作用类似,但是控制台中的内容并不会保存到文件中,而日志可以长期保存。

4.帮助我们排查和定位错误。比如在系统抛出异常时,将异常信息记录到日志,可以事后复盘。

5.通过分析日志还能够优化代码逻辑、提升系统性能、稳定性等。

日志虽然有那么多的作用,但如果数量过多,也会让开发人员感到头疼。对于大型的系统,程序员们经常要看几千、几万行日志,常常看日志看到头晕眼花。

但是,其实处理日志是有很多技巧的,下面鱼皮分享自己和日志的故事。

故事分为7个阶段,

从看日志看到怀疑人生,再到玩弄千万日志于股掌

,鱼皮都做了哪些事情?

鱼皮和日志的爱恨情仇

第一阶段无日志

刚开始搭建新的系统时,为了图个方便,鱼皮没有给系统接入任何的日志框架,也没有记录任何日志,整个项目非常的干净丝滑。需要调试时就直接用输出函数将信息打印在控制台,出了异常就直接打印堆栈。

真是无事一身轻,爽的不得了!

可惜,好景不长。在项目上线之后,突然有一天,系统出问题了,数据查不出来了,同事找上门来了。

鱼皮笑着说:“问题不大!”

然后登录服务器,进入项目目录,瞬间傻眼。

项目目录依旧干净丝滑,原来我特么根本没记日志啊!

这下好了,什么问题都查不出来。乖乖地去给项目加上日志功能吧。

第二阶段引入日志类库

Java语言有很多优秀的日志类库,比如Logback、Log4j2等,提供了很多记录和打印日志的方法,非常方便。可以直接使用其中一个类库,而无需自己实现。此处因为鱼皮的项目使用SpringBoot框架进行开发,直接使用其默认日志库Logback即可。

使用方式很简单,先添加logback.xml配置文件,主要配置了日志文件的存储路径和格式。Logback框架还会自动将日志按天进行压缩,并且在一定天数后进行删除,以节约磁盘空间。最大存储天数也可以在配置文件中指定。

配置文件大概长这样:

在要打印日志的类上创建一个日志对象:

Loggerlogger=LoggerFactory.getLogger(MyApp.class);

然后就可以使用该对象去记录日志啦:

catch(Exceptione){logger.error("apperror",e);}

加上配置文件后,启动项目,就可以看见生成的日志文件了。欧耶,下次系统再出问题,就不怕缺乏信息来排错啦!

系统运行了一个小时之后,同事又找上门来了,这次鱼皮很有底气,笑着说:“问题不大!”

然后打开日志文件一看,傻眼了,有几千行日志,我怎么知道哪行日志是报错信息呢?

就这你能秒了我?直接用Linux命令过滤出带“ERROR”字段的日志行就行了~

catapplication.log|grep

'ERROR'

虽然解决了问题,但是后面每次报错,都要输一遍这个筛选命令,而且随着文件越来越大,命令执行的速度越来越慢了。

能不能

把所有错误日志和正常日志区分开

,放在不同的文件中呢?

第三阶段日志分级

幸运的是,一般的日志框架都提供了日志分级存储功能,可以通过修改配置文件来实现。

修改logback.xml配置文件,将ERROR(错误)级别的日志单独输出到error.log文件中,实现日志分级:

启动项目,日志按预期分级写到了application.log和error.log两个文件。系统再出现异常时,鱼皮只需打开error.log文件,错误信息一览无遗!

系统运行一段时间后,鱼皮上线了一个很重要的服务,记录了相当多的业务日志。虽然目前错误日志可以单独查看,但是

核心服务的日志和其他服务的正常日志都堆积在application.log中

,想要仅查看核心服务的日志依旧要采用命令过滤的方式,比较麻烦。

有没有什么办法,把核心业务的日志单独记录到一个文件中呢?

第四阶段按类隔离

幸运的是,Logback日志框架支持将不同的类产生的日志记录到不同的文件中,修改配置文件即可。比如将所有RequestAOP类产生的请求日志记录到request.log中:

启动项目,自动生成了request.log文件,打开这个文件,就可以查看所有的请求日志,可以用于流控分析等等,真爽死了!

后来,随着系统的访问量越来越大,单台服务器已经不能满足对并发的需求,因此鱼皮又加了三台机器,共同提供服务。

有一天,系统又出问题了,同事找上门来,鱼皮心想:信不信分分钟给你解决bug!

一顿操作猛如虎,登录一台服务器查看日志,结果错误日志

空空如也

,比鱼皮的兜儿都干净。

奇怪了,怎么找不到错误信息?

对啊,现在有四台机器,请求可能落在了其他机器上,因此错误日志也可能在别的机器上!

哎,没办法,一台一台登录服务器去找错误信息吧。

其实四台机器还能忍,但是后来随着并发量的增大,鱼皮负责的系统已经有十台机器了,每次查看日志要依次登录十台机器去找!而且单个日志数据的量已经达到几十万行,无论怎么切分看起来都太累了。

哦,乔治,这太难受了!有没有什么办法,能让我在一个地方

集中看日志

啊!

要不直接把日志记录到数据库中?

不行不行,日志数据量太大了,数据库肯定存不下。而且写入数据库的速度受到网络传输等限制,比较缓慢。

怎么办啊?算了,先睡一觉。

第五阶段日志上报与集中式管理

“嘿,少年,你想要力量么?”

“废话,谁不想要!”

“听说过ELK么?他会指引你前进的方向。”

鱼皮从梦中惊醒,对啊,可以用ELK搭建一个分布式日志收集系统啊!

ELK是Elasticsearch、Logstash和Kibana的简称,

不是单独的一个软件,而是一整套问题的解决方案

Elasticsearch(简称ES)是

全文搜索引擎

,能够对海量数据进行存储和高效的搜索。

Logstash是一个

数据管道

,能够从各种数据源(比如MySQL数据库)收集数据,将数据从一处传输到另一处,并加以解析和转换。

Kibana是

数据可视化平台

,可以将Elasticsearch中存储的数据进行展示。在Kibana上,我们不仅可以看到所有原始的日志信息,还能够自定义各种精美直观的可视化图表。

通常使用Logstash统一收集各个机器上的数据,并传输至Elasticsearch进行存储,最后通过Kibana进行数据展示,之后就可以利用Kibana轻松地查看和分析所有的数据了。

既然可以解决问题,那就接入ELK吧~

但是使用ELK相当于为系统引入了三个新组件,考虑到系统使用的组件越多,复杂度越高,就越难维护;而且Logstash比较重,对CPU和内存的占用较高。因此,鱼皮灵机一动,干脆舍弃掉Logstash,直接将Elasticsearch当成数据库来使用。

先在SpringBoot中整合Elasticsearch,然后将日志数据通过依赖包提供的API接口存储到Elasticsearch,最后接入Kibana进行展示。

Maven引入依赖:

访问ES的接口:

@RepositorypublicinterfaceUserRepositoryext

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
上海最大的烂尾工程:总面积达50万平方米,如今却荒废成“鬼城”

上海最大的烂尾工程:总面积达50万平方米,如今却荒废成“鬼城”

今日搞笑分享
2024-04-30 07:45:15
中国现在碰到了一个比日本以前还难搞的问题:就是内需不给力。

中国现在碰到了一个比日本以前还难搞的问题:就是内需不给力。

户外阿崭
2024-04-29 19:11:27
晕机还抢不到火车票,00后小伙五一将打顺风车跨三千公里回黑龙江!

晕机还抢不到火车票,00后小伙五一将打顺风车跨三千公里回黑龙江!

潇湘晨报
2024-04-29 20:11:09
经过我不断被喷之后发现,支持哈、伊、俄的大体应该是同一群人!

经过我不断被喷之后发现,支持哈、伊、俄的大体应该是同一群人!

翻开历史和现实
2024-04-27 15:59:22
男子强行拔特斯拉充电枪,车主怒了:6000元修车费谁来买单?

男子强行拔特斯拉充电枪,车主怒了:6000元修车费谁来买单?

户外小阿隋
2024-04-29 21:04:44
俄罗斯扩大反战言论罪名范围:反战就是反对俄罗斯!

俄罗斯扩大反战言论罪名范围:反战就是反对俄罗斯!

自由电台
2024-04-27 09:11:13
扒叔大爆料:李佳琦和小助理付鹏的瓜?英国太子妃遗像曝光?奶茶妹稳了?脱衣舞Lisa逼婚?

扒叔大爆料:李佳琦和小助理付鹏的瓜?英国太子妃遗像曝光?奶茶妹稳了?脱衣舞Lisa逼婚?

房产衫哥
2024-04-29 23:13:21
大S被摆了一道?赔本也要办演出原因曝光,疑被具俊晔签合同拿捏

大S被摆了一道?赔本也要办演出原因曝光,疑被具俊晔签合同拿捏

萌神木木
2024-04-29 19:17:11
北京球迷协会:国安球迷如需当天高铁返京,请在80分钟前离场

北京球迷协会:国安球迷如需当天高铁返京,请在80分钟前离场

懂球帝
2024-04-29 15:02:12
67岁大爷每天用猪油炒菜,5年后体检,医生惊呼:你到底吃的什么

67岁大爷每天用猪油炒菜,5年后体检,医生惊呼:你到底吃的什么

今日养生之道
2024-04-29 16:42:09
“新冠疫苗之父”的突然落马,让我回想起新冠时期的“顽强抗争”

“新冠疫苗之父”的突然落马,让我回想起新冠时期的“顽强抗争”

巴城的城
2024-04-28 19:05:46
伊朗一场导弹雨,同时炸醒3个国家:若来的是中国导弹将毫无胜算

伊朗一场导弹雨,同时炸醒3个国家:若来的是中国导弹将毫无胜算

娱乐圈小胡椒
2024-04-29 10:49:36
暂别国乒,国乒小张继科官宣决定,加盟法国,刘国梁看懂了

暂别国乒,国乒小张继科官宣决定,加盟法国,刘国梁看懂了

东球弟
2024-04-29 16:57:11
湖人vs掘金G5:双方首发保持不变,范德比尔特能够出战

湖人vs掘金G5:双方首发保持不变,范德比尔特能够出战

懂球帝
2024-04-30 09:48:20
上海母亲被亲生女儿砌入水泥墩,生前跪地求饶:求求你放过我

上海母亲被亲生女儿砌入水泥墩,生前跪地求饶:求求你放过我

一个人讲故事
2024-04-16 20:33:19
开鲁县土地“有偿使用费”再调查:张家兄弟称是招商引资而来,早年平整土地花费巨大

开鲁县土地“有偿使用费”再调查:张家兄弟称是招商引资而来,早年平整土地花费巨大

红星新闻
2024-04-28 23:30:17
网友抱怨长辈被时代红利保护得太好了,评论区炸锅了

网友抱怨长辈被时代红利保护得太好了,评论区炸锅了

冥王星与一只碗
2024-04-30 00:26:46
外媒:德国与日本强烈反对没收俄罗斯资产

外媒:德国与日本强烈反对没收俄罗斯资产

凤凰网财经plus
2024-04-29 14:08:33
黄晓明新女友叶珂事业线大赏,大家觉得跟baby比起来怎么样?

黄晓明新女友叶珂事业线大赏,大家觉得跟baby比起来怎么样?

娱乐圈人物大赏
2024-04-25 15:11:10
王楠憔悴,富豪老公限制消费成老赖?郭斌现身回应,他不该犯错

王楠憔悴,富豪老公限制消费成老赖?郭斌现身回应,他不该犯错

东球弟
2024-04-29 12:43:08
2024-04-30 10:08:49
志刚谈科技
志刚谈科技
和你一起理解科技认识世界
606文章数 1048关注度
往期回顾 全部

头条要闻

中纪委节前打虎:司法部原副部长刘志强被查

头条要闻

中纪委节前打虎:司法部原副部长刘志强被查

体育要闻

上海男篮:年轻人,学费总是要交的

娱乐要闻

田馥甄遭抵制,蔡依林却能稳稳捞金?

财经要闻

建信人寿巨亏40亿 部分产品退保率93%

科技要闻

特斯拉股价飙涨15% 马斯克中国行大获成功

汽车要闻

配置更丰富 静态体验2024款欧拉好猫

态度原创

游戏
本地
教育
旅游
房产

《沙加:Emerald Beyond》无DLC计划 有多结局

本地新闻

食味印象 | 潍坊:碳水脑袋的人间乐园

教育要闻

面对青春期的孩子,父母应该如何放手?

旅游要闻

入境游热度持续攀升 “畅游中国”更便捷

房产要闻

拆迁致富成过去式?广州旧改探索新出路

无障碍浏览 进入关怀版