专栏首页赵KK日常技术记录开源日志框架的原理与分析(下)

开源日志框架的原理与分析(下)

本章内容根据《分布式服务架构》整理

日志系统的优化和最佳实践

-开发中打印日志的最佳时机

-日志级别的设置

-日志的数量和大小

-日志的切割方式

-日志格式的配置

-线上事故案例

1.开发人员的日志意识

#开发代码时要有意识的设想代码出现问题时的场景,针对场景记录关键程序的运行信息,容易定位问题

#打印日志必须包含环境信息,例如用户ID,角色,参数等

#对异常等错误信息必须打印错误级别及以上的日志,对线上日志定期检查

#生产环境将关闭的日志必须在打印日志前进行判断,以此提高效率、

#必须使用占位符代替字符串链接

#对关键业务步骤必须打点并记录耗时和结果

2.日志级别的设置

线上应用info就够了

*QA测试环境可以使用debug及以下级别

*刚刚上线的项目可使用debug级别

*上线后稳定的应用使用info级别

*常年不出现问题的应用使用error级别

3.日志数量和大小

控制日志的输出量,避免由于业务上量导致服务器磁盘占满。

单条打印日志不超过1KB

遇到连续的大日志是可采取抛弃的策略

4.切割方式

cat app.log > app.`date' '+%Y-%m-%d'`.log

cat /dev/null/ >app.log

存储到日期后缀的日志文件中后,清空当前日志

5.日志格式的配置

例如%p:输出日志信息的优先级

%d:输出日志时间点的日期和时间

%t:输出该日志事件的线程名

6.一行日志导致的线上事故

private void dosomething(...,Map  param){
    
    Log.debug("-------");
    
}

线上服务偶发报NullPointerException,通过堆栈调用,发现他是一个领域模型的toString()方法报出来的

public class DomainObject{
    
    public  String toString(){
        return "DomainObject" +DomainObject.getId();
       
    }
}=toString方法在实现时需考虑链接字符串可能产生空指针异常,对可能为空的字段进行判断

=如果没有进行判空,在toString方法中抓住异常

=在增加打印日志时考虑toString方法是否有传导性

=一定要在try...finally语句进行资源释放

=是用缓存储存数据,确保存入的数据的完整性

=如果对象不大,并不是一个集合类,在toString方法中考虑Json序列化后将对象转化为字符串

本文分享自微信公众号 - 赵KK日常技术记录(gh_cc4c9f1a9521),作者:赵kk

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用户支付成功但下单失败了怎么办?

    8月,是更新最少的一个月了,出差一个月,打乱了节奏,回来第一周异常的累,其实最近并没有看新的文章,或者特别感兴趣的东西,不过好在遇到了两个新问题...

    疯狂的KK
  • 点赞功能设计与实现

    点赞业务本身并不复杂,无非是对数据的update,但是点赞本身是无意识行为,并且同一个用户可对博文进行点赞/取消点赞,如果直接操作数据库,无疑会增加数据库io操...

    疯狂的KK
  • 递归优化

    那篇并编程艺术3写完了,但下午发现了原创度更高的个人真实案例分析,反正已经写完了,随时可以发,个人问题的优化记忆才更深。

    疯狂的KK
  • 怎么打日志

    王小明_HIT
  • 微服务拆分过细?“卫星”系统帮你做日志收集无遗漏

    背景 随着酒店业务的高速发展,我们为用户、商家提供的服务越来越精细,系统服务化程度、复杂度也逐渐上升。微服务化虽然能够很好地解决问题,但也有副作用,比如,问题定...

    美团技术团队
  • 日志自动分析和解析开源工具

    https://blog.csdn.net/arpospf/article/details/98795806

    lilihongjava
  • 【PaperReading】Tools and Benchmarks for Automated Log Parsing

    Jieming Zhu① , Shilin He② , Jinyang Liu③ , Pinjia He④ , Qi Xie⑤ , Zibin Zheng⑥ ,...

    lilihongjava
  • 你真的会正确使用日志吗?

    日志在应用程序中是非常非常重要的,好的日志信息能有助于我们在程序出现 BUG 时能快速进行定位,并能找出其中的原因。

    xcbeyond
  • C语言 | C++打印有效日志

    一般在程序上线之后,一旦发生异常,第一件事就是要弄清楚当时发生了什么。用户当时做了什么操作,环境有无影响,数据有什么变化,是不是反复发生等,然后再进一步的确定大...

    C语言入门到精通
  • 认识日志分析平台ELK

    为什么要使用日志分析平台 对于日志的重要性,都会很认同,不管是一个小网站,还是一个大系统,都会用到日志 网站初期,一般就是查看web服务器访问日志,例如,平时...

    dys

扫码关注云+社区

领取腾讯云代金券