1. 什么是日志
日志是指工作日志,现在的日志主要发表在网络,详细介绍一个过程和经历的记录。
在计算机中,日志是计算机系统、应用程序或设备在运行过程中,按一定格式记录的事件、状态、操作或错误信息的文本(或结构化数据)。它相当于系统的“日记”,用于追踪运行过程、排查问题、分析行为或满足合规性的要求。
2. 日志在项目开发中的作用
在项目开发中,一般都需要使用到日志。没有日志并不会影响项目的正常运行,但是没有日志的项目可以说是不完整的。日志在调试、错误或者异常定位、数据分析中是至关重要的。
2.1 问题排查与调试
当系统出现错误(如崩溃、功能异常)时,日志能记录错误发生的时间、位置、上下文(输入参数,调用栈),帮助开发者定位问题根源
2.2 系统监控与告警
日志可以实时反馈系统状态(CPU使用率、请求响应时间),通过监控工具分析日志,可以及时发现异常(频繁超时、流量突增)并触发告警
2.3 行为审计与合规
记录用户操作(登录、数据修改)或系统关键行为(文件删除、权限变更),满足行业合规要求(日志保存的时间)
2.4 性能分析与优化
通过日志中的时间戳和耗时记录(接口调用耗时、数据库查询时间),分析系统瓶颈,指导优化方向
3. 日志分类
面向问题排查的日志
面向提醒或告警的日志
面向调试和测试的日志
面向功能的日志(准确来说,是数据文件,不是日志)
面向人阅读的日志
面向机器解析的日志
4. 日志的实现方式
在编程中,日志的核心功能主要包括:
日志输出:写入文件、控制台、网络服务等滚动策略:当日志文件达到指定大小或时间(每天)时,自动创建新文件(避免单文件过大)异步写入:通过缓冲区和后台线程异步写入日志,避免主线程阻塞格式化:自定义日志格式(包含时间、级别、模块),便于后续分析
5. 日志消息的级别
5.1 FATAL 致命错误
发生致命错误,代表服务器整个或者核心功能,已经无法工作。处理原则如下:
在服务器启动时就进行检查,如果存在致命错误直接抛出异常,让服务器不要启动起来(启动了也无法正常工作,不如不启动)
在服务器启动之后,发生了致命的错误,则记录error级别的错误日志,最好是同时触发相关的修复和警告工作(比如给开发和维护人员发送警告邮件)
5.2 ERROR 错误
发送error级别的错误,代表功能或者重要逻辑遇到问题,无法正常工作
5.3 WARN 警告
warn是警告的意思,有两方面作用:
从程序角度,在某些功能或逻辑不正常时,发生了一些小故障但是没有大的影响
从业务角度,遇到了一些特殊操作或者特殊数据,例如重要数据或配置被修改,或者某些操作需要引起重视
5.4 INFO 信息
info 用于记录一些有用的、关键的信息,一般这些信息出现不频繁,只是在初始化的地方或者重要操作的地方才记录
5.5 DEBUG 调试
debug 用于记录一些调试信息,为了方便查看程序的执行过程和相关数据,了解程序的动态
5.6 TRACE 跟踪
trace 用于记录一些更详细的调试信息,这些信息无需每次调试时都打印出来,只在需要更详细的调试信息时才开启,例如在排查问题、检测时跟踪程序的执行
5.7 TRACE 和 DEBUG的区别
debug 级别的日志相对规范,主要记录程序执行过程中的关键信息,可在生产环境中留存,用于排查问题,其输出量要控制在较小范围
trace 级别的日志,仅用于开发或者测试时调试程序,用来查看程序执行的详细信息。这类日志通常仅在开发环境启用,在测试环境和生产环境中一般默认关闭,仅在需要排查问题时才开启。对于 trace 日志的输出量没有限制,因此其通常会产生较多的日志内容
总结
需要明确的是,日志的记录与否与日志级别,应根据功能的重要性来判定,而非取决于程序是否出现异常。这意味着,即便程序报错,也并非一定要记录为 error 级别的日志——对于一些不太重要的模块,将报错信息记录为 warn 或 debug 级别即可
此外,当系统发生致命错误时,不能仅仅记录一条 error 日志就完事,还必须立即采取相应的应对措施