Last active 10 months ago

這段 Python 程式碼使用 loguru 來 記錄並管理日誌訊息,支援 不同級別(INFO、DEBUG、WARNING、ERROR、CRITICAL)的日誌,並可輸出至 終端機 (sys.stderr) 或檔案 (log.txt、debug.txt)。它還示範了 顏色標記 (opt(colors=True))、錯誤追蹤 (logger.exception())、格式化 (opt(record=True)) 及自訂篩選條件 (filter=only_debug_filter)。此外,腳本還包含了一個 除法函式 (divide()),並處理除數為 0 的異常。這適用於 伺服器監控、錯誤記錄、程式偵錯及系統日誌管理,能夠提升 日誌的可讀性與除錯效率。

Revision 9a0425a91ce1e22c67bfb9e641336f827e06168e

logger_tutorial.py Raw
1import sys
2
3from loguru import logger # 引入logger套件
4
5logger.remove() # 移除現有的logger設定
6logger.add(sys.stderr, level="INFO") # 將logger設定加入到stderr中,並設定level為"INFO"
7# logger.add(sys.stderr, level="WARNING")
8# logger.add(sys.stderr, level="ERROR")
9# logger.add(sys.stderr, level="TRACE")
10
11logger.add("log.txt", level="INFO") # 將logger設定加入到指定的檔案中,並設定level為"INFO"
12
13
14def only_debug_filter(record):
15 return record["level"].name == "DEBUG"
16
17
18logger.add("debug.txt", filter=only_debug_filter, level="DEBUG")
19
20logger.debug("Debug message")
21logger.info("Info message")
22logger.warning("Warning message")
23logger.trace("Hello, World!")
24logger.success("Success message")
25
26
27# 使用 logger.error() 函式來顯示 error 等級的 log
28logger.error("Error message") # ERROR
29
30# 在日誌中記錄"Critical message",日誌級別為"CRITICAL"
31logger.critical("Hello, World!") # CRITICAL
32logger.critical("Critical message")
33
34# 在日誌中記錄"We got a BIG problem",並將文字"BIG"標記為紅色,日誌級別為"WARNING"
35logger.opt(colors=True).warning("We got a <red>BIG</red> problem")
36
37
38# 在日誌中記錄"Per message colors",並將文字"colors"標記為藍色,日誌級別為"INFO"
39logger.opt(colors=True).info("Per message <blue>colors</blue>")
40
41# 在日誌中記錄"Display values from the record (eg. {record[thread]})",
42# 並顯示日誌記錄中的某些值,例如"thread"鍵所對應的值,日誌級別為"INFO"
43logger.opt(record=True).info("Display values from the record (eg. {record[thread]})")
44
45
46# By the way, "opt()" serves many usages
47logger.opt(exception=True).info(
48 "Error stacktrace added to the log message (tuple accepted too)"
49)
50
51try:
52 raise ValueError("This is a test error")
53except ValueError as e:
54 logger.exception(e)
55
56logger.opt(raw=True).info("Bypass sink formatting\n")
57
58# logger.opt(depth=1).info("Use parent stack context (useful within wrapped functions)")
59logger.opt(capture=False).info(
60 "Keyword arguments not added to {dest} dict", dest="extra"
61)
62
63# 建立一個函數,用來計算給定數字的除法
64def divide(num1, num2):
65 return num1 / num2
66
67
68# 呼叫函數並輸出結果
69result = divide(10, 5)
70print(result)
71
72# 處理除以0的例外情況
73try:
74 result = divide(10, 0)
75except ZeroDivisionError:
76 print("除數不能為0")
77 logger.exception("除數不能為0") # 記錄錯誤訊息
78
79
80# 結束程式
81print("程式結束")
82
83
84# https://loguru.readthedocs.io/en/stable/api/logger.html
85