日志原理与开发分析这篇完全指南就够了!适应各种规模!_通过开发日志进行数据分析(4)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

日志原理与开发分析这篇完全指南就够了!适应各种规模!

为啥公司业务上不去?要么程序没有输出日志到位,缺少价值数据。要么打印日志到位了,没有高效的分析工具!

为啥程序会崩溃?日志处理没到位呗,线上故障就得加班,浪费了时间还找不到问题根源!

别想为啥了,跟上来学习吧,本篇解决此类问题。

什么是日志(log)

想想,我们为什么要做笔记,翻看笔记?
或者说,每天写日记,
我们做了笔记是为了加强记忆,如果忘记了后面还能翻看。

日志就是类似笔记一样的东西。

小白问:那么日志能帮助开发者提高记忆,轻松学会写代码了?

这倒不是的。日志就想日记一样可以随时翻看,查看过去发生的事情。

好,下面来看雷学委的开发日常:
在这里插入图片描述

没错,像记日记一样,用程序记录了每个时刻做的事情,输出到文件,还能经常查看。这就是日志。

当我们把这些零散的日志归集起来,数据量大了,就能发现日志数据的规律和价值。

本文会使用log4js来进行日志使用的展示。Java开发是使用Log4J或者Slf4J,但是核心思想是一样的。

本文适用于任何语言,而且覆盖了单应用到大规模平台的处理。前面已经掌握了基本概念,下面继续看,

  • 日志的简单应用
  • 多种日志格式的使用和含义
  • 实际项目如何管理和配置日志
  • 大规模平台的日志管理与数据价值分析

学习的第一步都是先知道啥,怎么用,下面先使用。

先安装

我们这里先安装一个日志的模快。

打开终端执行下面命令:

npm install log4js

使用

看看雷学委的日记
const log4js = require('log4js')


var logger = log4js.getLogger('雷学委开发日常')
logger.level = 'info'


logger.info('早上起床')
logger.info('拥抱太阳')
logger.info('吃完早餐')
logger.info('充满希望')
logger.info('开始了代码的一天')


保存上面代码为demo-fun.js ,然后运行:
node demo-fun.js
可以得到跟上面日志图片的效果,读完可以试试。

下面正式开发

这里会有三个例子,展示日志打印和日志输出控制。

最简单的例子

复制下面代码为demo.js

var log4js = require("log4js"); // 加载log4js库
var logger = log4js.getLogger();//获取默认的logger
logger.level = "debug";
logger.debug("一些调试信息");

直接运行:node demo.js,效果如下:
在这里插入图片描述
很像console.log,不过多了一些东西,看起来像下面的格式:
[日期] [DEBUG] default - 日志消息详情。

这里的DEBUG为,一个日志级别,就像文件级别一样(有公开,内部可读,保密,绝密档案)

这只是一条日志记录。我们再看下面的,找找规律

再看一个例子:
//demo1.js
var log4js = require("log4js");
var logger = log4js.getLogger();
logger.level = "debug";
logger.debug("一些调试信息");
logger.info(" 普通日志");
logger.debug("又是调试信息了");

复制上面的6行代码保存为demo1.js,运行打印如下信息:
在这里插入图片描述
这里打印了3行日志,看到规律了吗?
每一行都是:[日期] [日志级别] default - 具体的日志内容

好,这里稍微做一下解释。

logger对象提供了不同方法,像debug,info等表示不同的日志级别!

不同的日志级别又代表什么呢?

看下面一个稍微复杂的例子,就能明白。

避免新人写代码出错,雷学委这里又贴心的为小白/懒人,提供了直接可以复制运行的代码。

先花30秒耐心看一下,保存为demo2.js

//demo2.js
const log4js = require("log4js");
//这里配置log4js使用fileAppender来输出“error”级别的日志。
//然后fileAppender是一个文件类型的日志累加器,输出日志到文件demo2.log
log4js.configure({
  appenders: { fileAppender: { type: "file", filename: "demo2.log" } },
  categories: { default: { appenders: ["fileAppender"], level: "error" } }
});
 
 
const logger = log4js.getLogger("demo");
//下面调用logger对象来打印一些日志。
logger.trace("一些程序跟踪信息");
logger.debug("这里输出调试信息.");
logger.info("普通日志输出在这里!!!");
logger.warn("程序发现可疑问题,打印警告信息");
logger.error("雷学委,程序发现错误了,报警信息!");
logger.fatal("雷学委,这里通常是服务端/引擎吃不消了,打印严重错误日志。");

看懂了吗?

上面的代码分为两个部分

  • 第一段加载并配置log4js对象,日志输出保存到哪里,输出的日志级别是什么,这里是‘error’级别
  • 第二段为创建logger对象,并用它的不同方法来打印不同级别的日志。

运行效果如下:
在这里插入图片描述
node demo2.js, 如上所说,日志打印到文件demo2.log里面。

另外demo2.log内容只有 [ERROR] 和[FATAL]这两个级别的日志,也就是,只有logger.error和logger.fatal两个函数的日志详情被输出到文件中。

如果把ERROR比喻为公开级别,那么像DEBUG/TRACE等就是保密级别了,指定了输出公开信息等话,保密数据是绝对不能打印出来的。

理解一下日志分级

先说级别,不同级别日志会有级别的关键词,像日志中的‘ERROR’, ’DEBUG’ 这些。

既然是级别了就有高低级别之分。

可以用下面的表达式进行级别低到高排列:

TRACE < DEBUG < INFO < WARN < ERROR < FATAL

所以这解释了demo2.js代码中指定了‘error‘级别之后, 只有
logger.error 和 logger.fatal 两行日志被打印了。

看懂了吗?就像日常的信息保护级别,指定级别越高越不能暴露更多信息,在程序中级别指定越高,输出的信息越少,同一个道理。

信息量慢慢加大 - 全部日志级别

下图是log4js模块提供的方法和日志级别。
在这里插入图片描述
log4js 提供了getLogger方法,开发者可以调用这个获取一个logger对象,用来输出不同级别日志。

然后,这里是最全面的log4js的提供的日志级别。

重新整理整个日志级别的排列变更如下:

ALL <TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

上面这个公式务必背诵默写!

这里读者可自行运行文末实例代码。

这里ALL级别相当于整个日志信息都打印,暴露的信息量最多,OFF暴露的信息量是极少的。

雷学委也准备了代码,读者稍后可从文末下载执行。

到这里还不懂,雷学委精心准备了下图,看到这个图已经值了!

在这里插入图片描述

至此,整个日志框架的核心,您已掌握了。

喝杯水,下面继续看实际应用。

实际项目中如何应用日志

配置化日志管理

上面的demo2的代码配置,应该提取日志模块的配置到文件。
在这里插入图片描述
配置放在文件中,可以修改配置不改代码切换日志。

但是应用需要重启,可以代理logger对象实现不重启动态加载。

日志级别的使用建议

通常我们打印‘info’级别日志,记得常规用户行为,如登录/查看更新资料/其他业务访问的log等。

  • info级别以下的使用

在开发过程中可以使用logger.debug函数去打印程序内部信息,比如打印一些中间变量的值,打印中间处理状态等等。

对于trace级别的日志,这个比较低级别,通常用来本地跟踪代码的执行的详细信息!在服务端,服务器上运行的程序通常不会开启,因为日志量会很大。

对于all级别很少使用,可以根据情况自己定义,很多时候用到trace级别就很够信息量了。

  • 对于info以上的高日志级别

warn级别:打印警告信息,就是可能是错误,或者是忽略的已知错误。
比如系统在调用一个不稳定的接口,有时候别人不稳定只能多次重试,这时候会使用logger.warn方法来打印日志内容”忽略第三方程序调用错误,准备重试“

error级别:顾名思义就是,程序错误,这个可以用来打印错误数据,错误请求的事件信息,比如java中抛出一些CheckedException的时候经常会在catch代码快中调用logger.error来记录此类异常。
这类成为错误记录,更多是程序内部处理,业务方面的错误记录。

fatal级别更多是在NodeJS引擎出现故障,或者JVM(java
虚拟机)这种引擎级别的故障可以用这个级别来打印。针对web应用,像访问底层数据库的失败的时候,也可以用这个fatal级别来记录。
出现这种问题一般是本应用的故障,或者因为网络,操作系统的故障导致的程序故障。

日志格式化问题

如下面的log4js配置一样,加了一个标准输出来展示。
这里的patern: “%d [%p] [%c] - %m%n” 就是我们打印日志的格式。%d是一个占位符,最简单可以理解,就是表示一个时间戳,代表打印日志的时间。
%p %c这些就是占位符,也就是代表了日志级别,日志对象(特定的logger)等。
%m 代表当前如logger.info方法传入的消息。
%n 为换行。
在这里插入图片描述
效果如下:
在这里插入图片描述
所有格式定义参考:https://github.com/log4js-node/log4js-node/blob/master/docs/layouts.md

log4js还可以支持将日志写到多个文件中参考:https://github.com/log4js-node/log4js-node/blob/master/docs/multiFile.md

重点说一下,日志格式其实不用过度纠结,但必须在输出准确日志信息的情况下,同时保证整个系统或者多个服务的配置达到统一标准。

统一标准,比如说格式上的输出标准,代码日志输出标准,路径的标准等等。不然容易失控,这需要在架构上达成一致。

日志文件滚动策略

开发的应用通常都是长期运行的,会不停的产生日志。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

致。

日志文件滚动策略

开发的应用通常都是长期运行的,会不停的产生日志。

[外链图片转存中…(img-C4CfmmOn-1715465632527)]
[外链图片转存中…(img-LPFCT42M-1715465632527)]
[外链图片转存中…(img-B454vpW4-1715465632528)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《nginx完全开发指南》是一本介绍nginx的操作和开发的详细指南。Nginx是一款开源的高性能Web服务器和反向代理服务器,它的设计极为简洁,可以快速高效地处理大量的Web请求。本书详细介绍了Nginx的运行原理和基本配置、常见模块、反向代理、负载均衡、HTTPS部署、Nginx扩展开发等方面的知识。其中,重点介绍了Nginx的C语言扩展开发,包含了连接池、内存池、数据缓存、日志模块、定时器等核心功能的实现。同时,本书还涵盖了Nginx在高并发、高性能场景下的优化方法,包括TCP参数调整、负载均衡算法、后端服务器连接池等方面的内容。 对于参与Web开发的工程师和运维人员而言,《nginx完全开发指南》是一本非常实用的技术指南。书中除了详细介绍了Nginx的基本功能和应用场景外,还深入探讨了Nginx扩展开发的核心理念和实现方法,让读者深入理解Nginx的工作原理,从而更好地适应不同的需求。此外,书中的实例代码和案例分析,也能让读者在理论基础上更好地掌握Nginx的实际应用,提高自己的技能水平。 总之,《nginx完全开发指南》是一本非常全面的Nginx技术指南,对于想要深入了解Nginx的开发和优化的读者而言,是一本不可多得的技术参考书籍。 ### 回答2: 《nginx完全开发指南》是一本关于Web服务器Nginx的实践指南,详细介绍了Nginx的原理、安装配置、可行性和高级应用。本书涵盖了大量的实用技巧和实例,易于新手入门,对于有经验的开发人员来说也是一本不可多得的参考手册。 本书首先详细介绍了Nginx的概念、安装和配置,包括Nginx的架构、事件模型、编译安装和运行配置。接着,本书详细介绍了Nginx的HTTP服务器、反向代理和负载均衡,以及如何使用Nginx搭建多个虚拟主机和动态Web站点。 同时,本书也介绍了安全、缓存和公共网关接口等高级主题,以及如何使用Nginx进行日志处理、性能优化和Web服务监测。此外,本书还涉及了Nginx与PHP、Python、Ruby等语言的集成,以及与MySQL和Redis等数据库的交互。 总之,《nginx完全开发指南》对Nginx的开发和应用提供了全面的指导和实例,既适合初学者,也适合有经验的开发人员。同时,该书结合了开发和实践,为读者提供了深入了解Nginx并灵活应用的能力和方法。 ### 回答3: 《Nginx完全开发指南》是一本面向Linux系统管理员和开发人员的实用指南,适合初学者和有一定经验的人员学习使用。本书通过详细讲解Nginx服务器的安装、配置、请求处理等方面的内容,让读者掌握使用Nginx搭建Web服务器的技能。 该书首先介绍了Nginx服务器的概述和整体架构,接着深入探讨了Nginx的安装和配置方法,包括如何进行源码编译、模块加载、运行环境配置等方面的内容。其次,该书详细分析了Nginx服务器的请求处理机制和动态模块的编写方法,帮助读者深入了解Nginx服务器的运行原理和核心功能。 此外,本书还介绍了Nginx服务器的高级应用和优化技巧,例如反向代理、负载均衡、SSL加密、缓存控制等方面的内容。这些内容可以帮助读者在实际工作中更好地运用Nginx服务器,提高服务器的性能和可靠性。 总体来说,《Nginx完全开发指南》是一本非常实用的书籍,内容深入浅出,易于理解,适合初学者和有一定经验的读者阅读和学习。对于需要使用Nginx服务器搭建Web应用的开发人员和系统管理员来说,该书是一本不可多得的好书。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值