日志到底应该怎么打 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ljzxloaf
V2EX    程序员

日志到底应该怎么打

  •  
  •   ljzxloaf 2021-08-13 17:36:00 +08:00 5186 次点击
    这是一个创建于 1519 天前的主题,其中的信息可能已经有所发展或是发生改变。

    日志内容

    不讨论针对用户行为的埋点日志,仅讨论业务日志。

    待过两家公司,完全不同的日志策略:前者是内容平台(也是创业公司),基本上能不打日志就不打,只打一些异常日志;后者是交易平台,基本上所有用户请求都要 trace,每个请求参数,返回值的关键信息,除了集合类型的数据,其他数据都是尽量落日志了。

    我总结了下,前者因为是内容平台,内容多寡、精不精确,对用户其实没有承诺(当然用户会用脚投票),真有问题就让用户重新操作下就可以了;而后者因为涉及到交易,需要对交易链条上的每个环节负责到底,无论是因为用户操作不当还是系统问题都需要给出合理的解释。前者没有一个客服,后者一大帮客服。前者平台跟用户是互利的(流量换内容),后者用户是平台爸爸。

    思考:用户对产品的认知有差异,产品越简单,这种差异越小,就越不需要客服,也就越不需要日志。减少日志的办法可能还是简化产品逻辑,使之符合更多人的预期。

    日志级别

    正常业务流程 info,业务异常 warn (可能是参数不对或者不能满足一些业务条件之类的),这两种都属于正常情况,ret=0,表示结果是可用的,前端可以直接展示给用户。业务异常不能打 error,否则会有大量报警。

    只有系统异常(如超时)才打 error,ret 不等于 0,表示结果不可用,前端可以根据 errorcode 判断是要重试还是怎么处理。这种异常会报警,可以标识服务的状态。

    errorcode 也是一个值得讨论的话题,不过这贴先不讨论了。

    不知道 XDM 在项目中是如何实践的,欢迎分享讨论

    第 1 条附言    2021-08-13 18:14:24 +08:00
    日志的作用之一是极大地降低了与用户的沟通成本
    26 条回复    2021-08-15 19:25:32 +08:00
    chendy
        1
    chendy  
       2021-08-13 17:51:24 +08:00   3
    个人倾向是多打日志,多打日志最多导致需要更多的磁盘空间保存日志,但是用户遇到问题咨询甚至投诉的时候找不到日志才是真的要命
    raaaaaar
        2
    raaaaaar  
       2021-08-13 18:58:48 +08:00
    磁盘成本又不高
    delectate
        3
    delectate  
       2021-08-13 19:37:19 +08:00
    @raaaaaar 张小点了个赞,下一个版本,微信又多占了 50g 的 rom 空间。
    guodong110
        4
    guodong110  
       2021-08-13 21:05:53 +08:00
    打出入口日志,中间业务逻辑看需求,有必要就打
    wangbenjun5
        5
    wangbenjun5  
       2021-08-13 21:34:48 +08:00
    讲个实话,有些菜鸡喜欢一行一个日志,好像日志没有开销一样,个人感觉业务日志开发调试的时候可以打点,基本上稳定之后能删就删,真正有自信的人不用打日志,要打也是打关键地方。
    yitingbai
        6
    yitingbai  
       2021-08-13 22:02:04 +08:00
    我跟你说微信 app 怎么打的吧, 我反编译看过, 他们在编译的时候, 给每个函数头部和尾部都插入了代码, 方便知道函数的调用链, 排查问题更方便. 日志千万不要省, 除非调用非常频繁的函数, 日志可以省点, 其他函数, 日志能多久多, 能详细就详细
    pengtdyd
        7
    pengtdyd  
       2021-08-13 22:41:14 +08:00
    日志太多,给运维带来困难,上线之后不应该出现 info 日志才对
    GM
        8
    GM  
       2021-08-13 22:51:35 +08:00
    @pengtdyd 一旦系统出问题有交易失败,你查日志又找不到任何错误信息的时候,你就知道抓狂了
    pengtdyd
        9
    pengtdyd  
       2021-08-13 23:10:11 +08:00
    @GM 如果日志过多,如何从海量日志里面定位问题,日志如何存储,如何维护,保存多久等等一系列的问题就出现了,我觉得这些本身应该可以通过全链路压测解决
    chendy
        10
    chendy  
       2021-08-13 23:12:41 +08:00
    @pengtdyd 日志要有,链路跟踪也要有,两者不冲突
    GM
        11
    GM  
       2021-08-14 00:18:23 +08:00
    @pengtdyd 定位问题有办法的,每个请求进来先分配一个 requestId,之后所有这次请求相关的日志都带上这个 requestId,排查问题简直不要太方便。我公司现在就是保存全链路详细日志,日志保留 30 天,也就大约 100G 左右,一个月成本几十块钱,非常划算。
    witcherhope
        12
    witcherhope  
       2021-08-14 00:22:33 +08:00 via iPhone
    日志太多和太少本质是同一个问题
    sujin190
        13
    sujin190  
       2021-08-14 00:23:53 +08:00   1
    我觉得楼主似乎混淆了,我们一般说的日志都是运行日志,这个只是监测、异常报告用的,所以一般打核心点和异常栈就行了,后面交易这个应该算业务日志,本身就是支付系统业务流程的一部分,认真说把运行日志和业务日志打在一起时极其傻叉的行为,本来两者的用途就不一样,其它的还有链路追踪用的,调试分析用的等等,每一种各有不同,也不需要同时启用所有日志,打日志的侧重点也不一样,保存周期可能也不同,本身就不应该混在一起打
    IvanLi127
        14
    IvanLi127  
       2021-08-14 00:25:53 +08:00 via Android
    我觉得,尽量在性能允许的范围内多打些日志。日志按级别分类存,然后低级别的日志存的时间短些。
    IvanLi127
        15
    IvanLi127  
       2021-08-14 00:28:01 +08:00 via Android
    另外,楼主说的交易平台里的日志,应该是类似操作留痕之类的东西,和另一个项目的日志本质上不是同一个东西嘞
    nuk
        16
    nuk  
       2021-08-14 00:49:11 +08:00
    当系统被入侵后或者有用户利用业务漏洞,日志的宝贵就体现出来了
    Sparkli
        17
    Sparkli  
       2021-08-14 00:54:22 +08:00
    我有个想法啊,是不是日志的三个级别 Info 、Warm 、Error 可以通过冷温热进行分级存储呢?类似于 ES 策略,这样兼具存储成本和排查效率二者优点
    xuanbg
        18
    xuanbg  
       2021-08-14 06:18:42 +08:00
    日志不是越多越好,而是越精准越好。精准的定义就是不需要的 1 条都没有,需要的 1 条都不少。
    chenshun00
        19
    chenshun00  
       2021-08-14 08:37:56 +08:00
    @GM 30 天 100G 么,要是日志量翻个 20 倍,30 倍呢。
    ruanimal
        20
    ruanimal  
       2021-08-14 10:30:21 +08:00
    @delectate 日志又不是都打本地,基本上是上报的
    sparkssssssss
        21
    sparkssssssss  
       2021-08-14 13:30:38 +08:00
    如果是性能日志或者程序的运行日志,当然是看大爷您心情了,只要你别出问题或者出问题了能快速定位.
    但是如果是业务日志,还是要根据业务 /产品需求吧,别到时候客户要查自己啥时候登陆过,啥时候做个 xx 操作,你这边一脸糟比
    kongkongyzt
        22
    kongkongyzt  
       2021-08-14 13:39:55 +08:00
    两种打日志的策略我都经历过, 我个人是觉得能多打日志的话就多打吧, 不然到时候追踪问题的时候就很麻烦了, 尤其是对方是惹不起的大客户的时候
    GM
        23
    GM  
       2021-08-14 15:14:18 +08:00   1
    @chenshun00
    算你翻 100 倍,又如何? 1000 倍我更开心,说明有大量业务,花钱买就是了。
    zu1y
        24
    zu1y  
       2021-08-15 00:43:41 +08:00
    我们这网关一台服务器每小时打 500G 左右日志,也只打了出入参。。

    挂了 4T 的硬盘,搞了个 crontab 每小时 zip 后转到 nfs 上去。。

    虽说硬盘这玩意确实不值钱,但每天这上百 T 的日志也不是个事,量太大也不好搞 ELK 里去查。很是疼

    但应该是监管部门对这玩意有要求,需要至少保存 6 个月?
    PolarBears
        25
    PolarBears  
       2021-08-15 03:00:09 +08:00
    @zu1y 虽然监管部门有要求要 6 个月,但没要求日志要详细到什么程度
    darknoll
        26
    darknoll  
       2021-08-15 19:25:32 +08:00
    我就不想打太多日志了,客户出问题我直接连对方调试呗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2783 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 14:47 PVG 22:47 LAX 07:47 JFK 10:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86