logging-best-practices
npx skills add https://github.com/kunhai-88/skills --skill logging-best-practices
Agent 安装分布
Skill 文档
Logging Best Practices Skill
ç®ç
æ¬æè½æä¾åºç¨å æ¥å¿çå®è·µæåï¼èç¦ å®½äºä»¶ï¼canonical log linesï¼ï¼æ¯ä¸ªè¯·æ±ãæ¯ä¸ªæå¡åªååºä¸æ¡å¯å«ä¸ä¸æçæ¥å¿äºä»¶ï¼ä¾¿äºè°è¯ä¸åæã
éç¨åºæ¯
å¨ä»¥ä¸æ åµåèæ¬æåï¼
- ç¼åæå®¡æ¥æ¥å¿ä»£ç
- 使ç¨
console.logãlogger.infoç - ä¸ºæ°æå¡è®¾è®¡æ¥å¿çç¥
- æå»ºæ¥å¿åºç¡è®¾æ½
æ ¸å¿åå
1. 宽äºä»¶ï¼å ³é®ï¼
æ¯ä¸ªè¯·æ±ãæ¯ä¸ªæå¡åªå䏿¡å¯å«ä¸ä¸æçæ¥å¿äºä»¶ãä¸è¦å¨ handler éå°å¤æ logï¼èæ¯å¨è¯·æ±ç»ææ¶æ±æ»ä¸ºä¸æ¡ç»æåäºä»¶åè¾åºã
const wideEvent: Record = {
method: 'POST',
path: '/checkout',
requestId: c.get('requestId'),
timestamp: new Date().toISOString(),
};
try {
const user = await getUser(c.get('userId'));
wideEvent.user = { id: user.id, subscription: user.subscription };
const cart = await getCart(user.id);
wideEvent.cart = { total_cents: cart.total, item_count: cart.items.length };
wideEvent.status_code = 200;
wideEvent.outcome = 'success';
return c.json({ success: true });
} catch (error) {
wideEvent.status_code = 500;
wideEvent.outcome = 'error';
wideEvent.error = { message: error.message, type: error.name };
throw error;
} finally {
wideEvent.duration_ms = Date.now() - startTime;
logger.info(wideEvent);
}
2. é«åºæ°ä¸é«ç»´åº¦ï¼å ³é®ï¼
å å«é«åºæ°å段ï¼å¦ user IDãrequest IDï¼ç¾ä¸çº§å¯ä¸å¼ï¼åé«ç»´åº¦ï¼æ¯æ¡äºä»¶å¤å段ï¼ãä¾¿äºæç¨æ·æ¥è¯¢ãåçæªäºå æ³å°çé®é¢ã
3. ä¸å¡ä¸ä¸æï¼å ³é®ï¼
å§ç»å å«ä¸å¡ä¸ä¸æï¼ç¨æ·è®¢é æ¡£ä½ãè´ç©è½¦éé¢ãåè½å¼å ³ãè´¦å·é¾çãç®æ æ¯è½ç¥éãä¸åé«çº§ç¨æ·æªè½å®æ 2499 ç¾å è´ä¹°ãï¼èä¸åªæ¯ãç»è´¦å¤±è´¥ãã
4. ç¯å¢ç¹å¾ï¼å ³é®ï¼
æ¯æ¡äºä»¶å å«ç¯å¢ä¸é¨ç½²ä¿¡æ¯ï¼commit hashãæå¡çæ¬ãregionãå®ä¾ IDãä¾¿äºæé®é¢ä¸é¨ç½²å ³èãå®ä½åºåæ§é®é¢ã
5. åä¸ Loggerï¼é«ï¼
å¯å¨æ¶é ç½®ä¸ä¸ª logger å®ä¾ï¼å ¨å±å¤ç¨ãä¿è¯æ ¼å¼ä¸è´ãèªå¨å¸¦ä¸ç¯å¢ä¸ä¸æã
6. ä¸é´ä»¶æ¨¡å¼ï¼é«ï¼
ç¨ä¸é´ä»¶å¤ç宽äºä»¶åºç¡è®¾æ½ï¼è®¡æ¶ãç¶æãç¯å¢ãååºï¼ãHandler åªè´è´£è¡¥å ä¸å¡ä¸ä¸æã
7. ç»æä¸ä¸è´æ§ï¼é«ï¼
- ç»ä¸ä½¿ç¨ JSON æ ¼å¼
- è·¨æå¡ä¿æå段å½åä¸è´
- ç®å为两ç§çº§å«ï¼
infoãerror - ä¸è®°å½éç»æåå符串
忍¡å¼
- 忣æ¥å¿ï¼ä¸ä¸ªè¯·æ±å
夿¬¡
console.log - å¤ä¸ª loggerï¼ä¸åæä»¶ç¨ä¸åå®ä¾
- 缺ç¯å¢ä¸ä¸æï¼æ commit hashãé¨ç½²ä¿¡æ¯
- 缺ä¸å¡ä¸ä¸æï¼åªæææ¯ç»èãæ ç¨æ·/ä¸å¡æ°æ®
- éç»æåå符串ï¼
console.log('something happened')èéç»æåæ°æ® - schema ä¸ä¸è´ï¼è·¨æå¡å段åä¸ç»ä¸
æåæè¦
宽äºä»¶
- æ¯ä¸ªæå¡è·³è½¬å䏿¡å®½äºä»¶
- å 嫿æç¸å ³ä¸ä¸æ
- ç¨ request ID 串èäºä»¶
- å¨
finallyä¸ã请æ±ç»ææ¶ååº
ä¸ä¸æ
- æ¯æé«åºæ°ï¼user_idãrequest_idï¼
- é«ç»´åº¦ï¼å¤å段ï¼
- å§ç»å«ä¸å¡ä¸ä¸æ
- å§ç»å«ç¯å¢ç¹å¾ï¼commit_hashãversionãregionï¼
ç»æ
- å ¨ä»£ç åºä½¿ç¨åä¸ logger
- ç¨ä¸é´ä»¶ä¿è¯å®½äºä»¶ä¸è´
- ä½¿ç¨ JSON æ ¼å¼
- ä¿æ schema ä¸è´
- ä» info / error 两级
- ä¸è®°å½éç»æåå符串
常è§å
- é¿å ä¸ä¸ªè¯·æ±å¤è¡ log
- ä¸ºãæªç¥çæªç¥ã设计
- è·¨æå¡ä¼ é request ID