Effective Debug Logging 的一个索引
åœ¨è¿™ä¸ªç³»åˆ—æ–‡ç« å½“ä¸æˆ‘把ç»éªŒæ€»ç»“æˆäº†30个Tipsï¼Œç”±äºŽæ•£å¸ƒåœ¨æ–‡ç« å„处,ä¸ä¾¿æŸ¥æ‰¾ï¼Œå› æ¤åœ¨è¿™é‡Œå»ºç«‹ä¸€ä¸ªç´¢å¼•ï¼Œä»¥ä¾¿å¯ä»¥æ–¹ä¾¿çš„引用。
- è®¾è®¡ç›®æ ‡
- Tip 1:调试日志的设计应该以“便于定ä½é”™è¯¯â€ä¸ºä¸å¿ƒç›®æ ‡
- 输出调试日志的方å¼
- Tip 2:选用åˆé€‚的日志输出方å¼ï¼Œä»¥ä¾¿äºŽæ”¶é›†å’Œå¤„ç†ä¸ºç›®æ ‡è®¾è®¡ã€‚用久ç»è€ƒéªŒçš„方案,输出到stdout/stderr或具有统一文件åæ ¼å¼çš„日志文件。
- 调试日志的分级和分类
- Tip 3:使用日志分级显示的机制,在æ£å¸¸è¿è¡Œå½“ä¸æŽ§åˆ¶æ—¥å¿—的输出é‡ï¼Œè°ƒè¯•æƒ…况下输出尽å¯èƒ½ç»†è‡´ã€‚
- Tip 4:在日志当ä¸è®°å½•å½“å‰æ—¥å¿—的级别,便于拿到日志之åŽçš„过滤和分æžã€‚
- Tip 5ï¼šæ·»åŠ è°ƒè¯•æ—¥å¿—çš„å·¥ä½œè¶Šç®€å•ï¼Œå¼€å‘人员越喜欢在代ç 当ä¸æ·»åŠ 调试日志。
- Tip 6:å³ä½¿éœ€è¦å¯¹äºŽæ¯ä¸ªæ¨¡å—分别控制日志级别,最好也能够æ供一个全局的日志级别控制选项。
- Tip 7:在å系统级别上,让ä¸åŒçš„å系统把日志输出到ä¸åŒçš„日志文件。
- Tip 8:在å系统内部,对于ä¸åŒçš„模å—,使用ä¸åŒçš„模å—æ ‡è¯†ï¼Œä¾¿äºŽå¼€å‘人员进行分æžå’Œè¿‡æ»¤ã€‚
- Tip 9:使用一些tricksæ¥ç®€åŒ–è°ƒè¯•æ—¥å¿—çš„æ·»åŠ ï¼Œå‡å°‘å¼€å‘人员在写调试日志时需è¦è€ƒè™‘的问题。
- Tip 10:在日志æ¡ç›®å½“ä¸åŒ…å«å¿…è¦çš„元信æ¯ï¼Œä¾‹å¦‚时间ã€PID/TIDã€æ—¥å¿—级别和分类ã€ä»£ç 文件ã€ä»£ç è¡Œã€å‡½æ•°ç‰ã€‚
- Tip 11:在调试日志的时间当ä¸ï¼ŒåŒ…å«å¿…è¦çš„时区信æ¯ã€‚
- Tip 12:在调试信æ¯å½“ä¸åŒ…å«å¯ä»¥åŒºåˆ†ä¸åŒæ“作对象的键值,以便ä¿è¯å¯¹åŒä¸€å¯¹è±¡æ“作的日志的相关性。
- Tip 13:在æ¯ä¸€ä¸ªå˜åœ¨é”™è¯¯å¤„ç†çš„地方,在错误处ç†åˆ†æ”¯ä¸Šæ·»åŠ 错误级别的日志,在æ£å¸¸æµç¨‹ä¸Šæ·»åŠ ä¿¡æ¯æˆ–调试级别的日志。
- Tip 14ï¼šå¯¹äºŽä¸šåŠ¡é€»è¾‘é€ æˆçš„æ¡ä»¶åˆ†æ”¯ï¼Œåœ¨æ¯ä¸ªåˆ†æ”¯çš„å…¥å£å¤„æ·»åŠ æ—¥å¿—ï¼Œä¿è¯ä»»ä½•åˆ†æ”¯è·¯å¾„都在调试日志覆盖之下。
- Tip 15:尽é‡ä¿è¯æ¯æ¡æ—¥å¿—ä¿¡æ¯çš„å®Œæ•´æ€§ï¼Œæ ¹æ®é€šç”¨çš„å¥æ³•æ¨¡å¼æ¥ç»„织æ¯ä¸€æ¡è°ƒè¯•ä¿¡æ¯ã€‚
- Tip 16:在日志当ä¸è¾“出错误代ç 时,åŒæ—¶è¾“出错误代ç 的类别。
- Tip 17:在线程函数的开始和结æŸå¤„æ·»åŠ æ—¥å¿—ï¼Œå¹¶æ供能够简å•çš„区分线程类型的å—符串。
- Tip 18:在进行å¯èƒ½æ¯”较耗时的æ“作之å‰å’Œä¹‹åŽï¼Œæ·»åŠ 日志进行跟踪,以便å‘现异常情况或进行简å•çš„性能分æžã€‚
- Tip 19ï¼šåœ¨å¯¹è±¡çš„æž„é€ ã€æžæž„和拷è´å¤„æ·»åŠ è°ƒè¯•æ—¥å¿—ï¼Œå…¶ä¸åŒ…å«å¯¹è±¡çš„地å€æˆ–其他å¯æ ‡ç¤ºè¯¥å¯¹è±¡çš„键值,用于跟踪对象的生命周期。
- Tip 20:如果必è¦ï¼Œå¯ä»¥åœ¨è¾ƒä½Žçš„调试级别上æ供对象或å议数æ®çš„转储(dump),以便分æžã€‚
- Tip 21:如果必è¦ï¼Œåœ¨æ—¥å¿—当ä¸è¾“出软件è¿è¡Œçš„环境信æ¯ï¼Œä¾‹å¦‚软件的é…置和æ“作系统信æ¯ã€‚
- Tip 22:如果使用异常,则尽å¯èƒ½åœ¨å¼‚常当ä¸åŒ…å«å®Œæ•´çš„å¯ä»¥æž„建一个错误日志的元信æ¯ï¼Œå¹¶åœ¨catch异常处将其打å°åˆ°è°ƒè¯•æ—¥å¿—。
- Tip 23ï¼šä½¿ç”¨åˆ‡åˆ†å’Œè¿‡æ»¤å·¥å…·å°†æ—¥å¿—æ ¹æ®ç›¸å…³æ€§åˆ’分æˆå¤šä¸ªå°çš„日志模å—进行分æžã€‚
- Tip 24:当需è¦è·¨è¶Šå系统进行跟踪时,å¯ä»¥ä½¿ç”¨æ—¥å¿—组åˆå·¥å…·å°†æ—¥å¿—组åˆä¹‹åŽå†è¿›è¡Œåˆ‡åˆ†ã€‚
- Tip 25:å°è¯•å°†å·²çŸ¥é—®é¢˜çš„日志模å¼åŠ 以记录,以便å¯ä»¥åœ¨é—®é¢˜åˆ°æ¥æ—¶å®¹æ˜“的确定是å¦æ˜¯å·²çŸ¥é—®é¢˜ã€‚
- Tip 26:使用工具定ä½PIDå˜åŠ¨çš„ä½ç½®å¹¶æŸ¥æ‰¾ç‰¹å¾å—符串,å¯ä»¥æ£€æµ‹åˆ°ç¨‹åºçš„崩溃。
- Tip 27:通过分æžæ—¥å¿—之间的时间差,å¯ä»¥æ£€æµ‹æ€§èƒ½é—®é¢˜æˆ–æ»é”。
- Tip 28:通过分æžæ—¥å¿—当ä¸èµ„æºåˆ†é…和释放的é…对情况,å¯ä»¥ç”¨æ¥æ£€æµ‹å†…å˜æˆ–资æºæ³„æ¼ã€‚
- Tip 29:使用自动化工具æ¥è¾…助路径跟踪。
- Tip 30:工具åªæ˜¯è¾…助,人的è€å¿ƒã€æ´žå¯ŸåŠ›å’Œç»éªŒæ‰æ˜¯åˆ†æžæ—¥å¿—的最é‡è¦èµ„本。