Effective Debug Logging (part 4)
这是这个系列的第四部分,也是最åŽä¸€éƒ¨åˆ†ï¼Œæˆ‘们将讨论如何有效的分æžè°ƒè¯•æ—¥å¿—ï¼Œå¹¶ç»™å‡ºä¸€äº›å…¸åž‹çš„æ—¥å¿—åˆ†æžæ–¹æ³•å’Œç»éªŒã€‚
如何分æžè°ƒè¯•日志
当支æŒäººå‘˜æˆ–者开å‘äººå‘˜æ‹¿åˆ°è°ƒè¯•æ—¥å¿—æ—¶ï¼Œé€šå¸¸çš„åˆ†æžæ–¹æ³•是先找到用户é‡åˆ°çš„问题所对应的日志,从这里出å‘,进行跟踪,并分æžå‡ºçŽ°è¿™ç§é—®é¢˜çš„åŽŸå› ã€‚åœ¨è¿™ä¸ªè¿‡ç¨‹å½“ä¸ï¼Œå˜åœ¨ä¸‰ä¸ªå¿…è¦çš„æ¥éª¤ï¼šå‘现问题所对应的日志,跟踪,分æžåŽŸå› ï¼Œè¿™ä¹Ÿæ˜¯åˆ†æžè°ƒè¯•日志的一般方法。
在整个过程当ä¸ï¼Œå‘现问题所对应的日志所在往往会消耗大é‡çš„æ—¶é—´ã€‚主è¦åŽŸå› ä¹‹ä¸€æ˜¯åˆ†æžäººå‘˜æ‹¿åˆ°çš„æ—¥å¿—往往是最低调试级别的,往往日志的æ¡ç›®éžå¸¸å·¨å¤§ï¼Œè€Œä¸”å¯èƒ½ä¸åŒ
的模å—ã€ä¸åŒçš„线程的调试日志混æ‚在一起,导致难于分æžã€‚å› æ¤å¯¹äºŽå¦‚æ¤å¤§é‡æ—¥å¿—,通过必è¦çš„辅助工具支æŒèƒ½å¤Ÿå¤§å¤§çš„æé«˜æ•ˆçŽ‡ã€‚
第一ç§è¾…åŠ©å·¥å…·æ˜¯æ—¥å¿—è¿‡æ»¤å’Œåˆ‡åˆ†å·¥å…·ã€‚æ ¹æ®æ—¥å¿—的所属的ä¸åŒæ¨¡å—ã€çº§åˆ«ï¼Œæˆ–è€…æ ¹æ®çº¿ç¨‹æˆ–日志的相关性键值,对日志进行过滤和切分,将其划分æˆå¤šä¸ªå°çš„相关的日志模å—,将æžå¤§çš„æ–¹ä¾¿è¿›è¡Œåˆ†æžã€‚è¿™ç§å·¥å…·å¯ä»¥ç”¨è„šæœ¬å®žçŽ°ï¼Œæˆ–è€…ç”¨grep过滤,甚至直接使用编辑器的查找功能(如ultraedit的“列出所有行â€åŠŸèƒ½ï¼‰ï¼Œé€šå¸¸å°†åœ¨å¾ˆå¤šæ—¶å€™å°±è¶³å¤Ÿäº†ï¼Œå› æ¤ä¸åšç»†è‡´çš„讨论。
Tip 23ï¼šä½¿ç”¨åˆ‡åˆ†å’Œè¿‡æ»¤å·¥å…·å°†æ—¥å¿—æ ¹æ®ç›¸å…³æ€§åˆ’分æˆå¤šä¸ªå°çš„æ—¥å¿—模å—进行分æžã€‚
有的时候问题å¯èƒ½å‡ºçŽ°åœ¨ä¸åŒå系统之间的交互之上,或者对于æŸä¸€ä¸ªå¯¹è±¡çš„æ“ä½œä¼šè·¨è¶Šå¤šä¸ªå系统,而ä¸åŒçš„å系统的日志文件å¯èƒ½å…·æœ‰ä¸åŒçš„æ–‡ä»¶å‰
ç¼€ã€‚å› æ¤ï¼Œå¿…è¦æ—¶å¯ä»¥ç”¨æ—¥å¿—组åˆå·¥å…·å°†å¤šä¸ªå系统的日志组åˆä¹‹åŽï¼Œå†ç»è¿‡æ—¥å¿—åˆ‡åˆ†å·¥å…·è¿›è¡Œåˆ‡åˆ†ã€‚è¿™ç§æ“作通常就需è¦ä¸¤ä¸ªåç³»ç»Ÿä¹‹é—´ä¿æŒä¸€å®šçš„æ—¥å¿—æ ¼å¼çš„è§„
约,以便工具å¯ä»¥å®¹æ˜“çš„æ‰¾åˆ°ç›¸å…³æ€§çš„é”®å€¼å¹¶æ ¹æ®è¿™ä¸ªé”®å€¼è¿›è¡Œç»„åˆã€‚
Tip 24:当需è¦è·¨è¶Šå系统进行跟踪时,å¯ä»¥ä½¿ç”¨æ—¥å¿—组åˆå·¥å…·å°†æ—¥å¿—组åˆä¹‹åŽå†è¿›è¡Œåˆ‡åˆ†ã€‚
å¯¹äºŽåˆ’åˆ†å¥½çš„åæ¨¡å—的分æžå°±æ˜¯å‘挥人类洞察力的时候了,人类的智慧就应该用在这ç§åœ°æ–¹:)。而一旦通过æŸç§æ–¹å¼å‘现了问题所对应的日志,接下æ¥çš„工作就相对简å•了。而一旦å‘现了问题所在,我们建议将这ç§é—®é¢˜æ‰€å¯¹åº”的日志抽å–出æ¥é€‚当的模å¼ï¼Œå¹¶å°†è¿‡ç¨‹æˆ–ç»“æžœåŠ ä»¥è®°å½•ï¼Œç”¨å¯è¿è¡Œçš„è„šæœ¬æˆ–éœ€è¦æ‰‹åЍæ“ä½œçš„æ¡æ–‡éƒ½å¯ä»¥ã€‚è¿™æ ·æœªæ¥å°±å¯ä»¥æ ¹æ®è¿™äº›ç§¯ç´¯ï¼Œå¿«é€Ÿçš„确定已知问题。
Tip 25:å°è¯•将已知问题的日志模å¼åŠ ä»¥è®°å½•ï¼Œä»¥ä¾¿å¯ä»¥åœ¨é—®é¢˜åˆ°æ¥æ—¶å®¹æ˜“çš„ç¡®å®šæ˜¯å¦æ˜¯å·²çŸ¥é—®é¢˜ã€‚
对于æŸäº›ç‰¹å®šçš„é—®é¢˜ï¼Œæˆ‘ä»¬å·²ç»æœ‰äº†ç›¸åº”的日志模å¼ã€‚
第一类问题是程åºå´©æºƒï¼Œè¿™ç§æƒ…况很容易通过分æžPIDå˜åЍ之å‰çš„æ—¥å¿—æŸ¥å‡ºåŽŸå› ï¼Œå› æ¤ï¼Œç”¨æŸç§å·¥å…·å¿«é€Ÿçš„定ä½PIDå˜åŠ¨çš„åœ°æ–¹ï¼Œå¹¶æŸ¥æ‰¾é™„è¿‘çš„ç‰¹å¾å—符串,å³å¯çŸ¥é“是å¦å‘生了崩溃。
Tip 26:使用工具定ä½PIDå˜åŠ¨çš„ä½ç½®å¹¶æŸ¥æ‰¾ç‰¹å¾å—符串,å¯ä»¥æ£€æµ‹åˆ°ç¨‹åºçš„崩溃。
第一类问题是性能问题或æ»é”。这也是Tip
18çš„æ¥æºã€‚我们å¯ä»¥é€šè¿‡æ±‚出æ“作开始之å‰å’Œç»“æŸä¹‹åŽçš„ä¸¤æ¡æ—¥å¿—之间的时间差值æ¥å¾—到这个æ“作æŒç»çš„æ—¶é—´ï¼Œæˆ–者识别这些æ“作是å¦å®Œæˆï¼Œæ˜¯å¦é™·
å…¥äº†æ— é™ç‰å¾…或超时ç‰ç‰ã€‚è¿™ç§æ¨¡å¼å¾ˆå®¹æ˜“é€šè¿‡è‡ªåŠ¨åŒ–å·¥å…·æ¥æ‰¾åˆ°ã€‚而对于性能问题,å¯ä»¥é€šè¿‡å·¥å…·åˆ†æžæ—¥å¿—ï¼Œç»Ÿè®¡å…¶ä¸æœ€è€—时的一些æ“作,并对其进行统计å¦åˆ†æžï¼Œå¯¹äºŽå®žé™…用户环境当ä¸çš„æ€§èƒ½ç“¶é¢ˆä¹Ÿå¯ä»¥æœ‰å¾ˆå¥½çš„预测,对于将æ¥çš„设计和改进也是éžå¸¸é‡è¦çš„资料。
Tip 27ï¼šé€šè¿‡åˆ†æžæ—¥å¿—之间的时间差,å¯ä»¥æ£€æµ‹æ€§èƒ½é—®é¢˜æˆ–æ»é”。
å¦ä¸€ç§é—®é¢˜æ˜¯å†…å˜æˆ–资æºçš„æ³„æ¼ã€‚虽然这ç§é—®é¢˜å¯èƒ½ä¸æ˜¯å¯ä»¥ä»…仅通过调试日志解决的。但是在有的时候,唯一能够用æ¥è°ƒè¯•å†…å˜æ³„æ¼çš„åªæœ‰è°ƒè¯•æ—¥å¿—ï¼Œå› æ¤å…ˆä»Ž
调试日志当ä¸åˆ†æžï¼Œæœ‰æ—¶ä¹Ÿèƒ½å¤Ÿå‘现一些问题,至少å¯ä»¥æŽ’除掉一些å¯èƒ½ã€‚å¦‚æžœæ ¹æ®Tip
19çš„å»ºè®®ï¼Œåœ¨å¯¹è±¡çš„æž„é€ ã€æ‹·è´ã€æžæž„çš„æ—¶å€™éƒ½åŠ ä¸Šäº†å¿…è¦çš„æ—¥å¿—,那么通过简å•çš„è„šæœ¬æ‰«ææ‰€æœ‰çš„相关的日志项å³å¯çŸ¥é“æ˜¯å¦æ‰€æœ‰çš„对象都得到了æ£ç¡®çš„æžæž„
了。如果需è¦å¯¹äºŽå†…å˜æ³„æ¼é—®é¢˜è¿›è¡Œæ›´å¤šçš„分æžï¼Œä¹Ÿå¯ä»¥å»ºç«‹ä¸€ç§æœºåˆ¶ï¼Œåœ¨æ—¥å¿—当ä¸è®°å½•所有的内å˜åˆ†é…和释放的æ“ä½œï¼Œå¹¶åŠ ä»¥åˆ†æžã€‚
Tip 28ï¼šé€šè¿‡åˆ†æžæ—¥å¿—当ä¸èµ„æºåˆ†é…和释放的é…对情况,å¯ä»¥ç”¨æ¥æ£€æµ‹å†…å˜æˆ–èµ„æºæ³„æ¼ã€‚
在å‘现了问题之åŽï¼ŒæŽ¥ä¸‹æ¥çš„å°±æ˜¯æ ¹æ®æ—¥å¿—è¿›è¡Œç¨‹åºæ‰§è¡Œè·¯å¾„的跟踪。由于å¯èƒ½éœ€è¦ç»è¿‡å¤æ‚çš„ç¨‹åºæ‰§è¡Œè·¯å¾„æ‰èƒ½å¤Ÿå‡ºçŽ°é—®é¢˜ï¼Œå®Œå…¨çš„æ‰‹åŠ¨è·Ÿè¸ªæ˜¯ä¸€ä»¶éžå¸¸æ¶ˆè€—人力物力的事情。由于在日志当ä¸çš„è®°å½•äº†ä»£ç æ–‡ä»¶å’Œè¡Œæ•°ï¼Œä»¥åŠå‡½æ•°å,这ç§åŠ¨ä½œä¹Ÿå¯ä»¥ä¸€å®šç¨‹åº¦ä¸Šé€šè¿‡å·¥å…·è‡ªåŠ¨åŒ–å¯»æ‰¾ä¸‹é¢çš„æ‰§è¡Œè·¯å¾„ï¼ŒåŠ å¿«è·Ÿè¸ªçš„é€Ÿåº¦ã€‚
Tip 29:使用自动化工具æ¥è¾…助路径跟踪。
虽然我们一直在强调辅助工具的é‡è¦æ€§ï¼Œä½†æ›´é‡è¦çš„还是日志的清晰程度和分æžäººå‘˜çš„è€å¿ƒä»¥åŠæ´žå¯ŸåŠ›ï¼Œè€Œè¿™ç§æ´žå¯ŸåŠ›å¾€å¾€éœ€è¦é€šè¿‡ç»éªŒçš„积累æ‰èƒ½èŽ·å¾—ã€‚å·¥å…·åªèƒ½å¤Ÿç”¨æ¥è¾…åŠ©æŸ¥æ‰¾å·²çŸ¥é—®é¢˜å’Œç»™å‡ºå»ºè®®ï¼Œäººçš„åŠªåŠ›æ‰æ˜¯å‘现问题ã€è§£å†³é—®é¢˜çš„æœ€ç»ˆå…³é”®ã€‚
Tip 30ï¼šå·¥å…·åªæ˜¯è¾…助,人的è€å¿ƒã€æ´žå¯ŸåŠ›å’Œç»éªŒæ‰æ˜¯åˆ†æžæ—¥å¿—的最é‡è¦èµ„本。
总结
至æ¤ï¼Œè¿™ä¸ªå››ä¸ªéƒ¨åˆ†çš„æ–‡ç« 告一段è½ã€‚æˆ‘å†™è¿™ç¯‡ä¸ªç³»åˆ—æ–‡ç« çš„ç›®çš„åœ¨äºŽå¸Œæœ›èƒ½å¤Ÿæ€»ç»“å’Œåˆ†äº«æœ‰å…³è°ƒè¯•æ—¥å¿—ç»éªŒï¼Œå¹¶ä¸ºæŽ¥ä¸‹æ¥çš„工作当ä¸å¯¹äºŽè°ƒè¯•日志的书写ã€å¤„ç†çš„æ ‡å‡†åŒ–作一些æ€è€ƒã€‚这些虽然都ç»éªŒï¼Œä½†æ¯•竟是一家之言,难å…ç‹éš˜ç”šè‡³é”™è¯¯ï¼Œå¸Œæœ›æœ‰æ›´å¤šçš„人å¯ä»¥å‚与讨论,给出更多的建议和分享更多的ç»éªŒã€‚