溫馨提示×

Ubuntu下Python日志配置怎么設置

小樊
49
2025-10-01 18:27:46
欄目: 編程語言

Ubuntu下Python日志配置的常見方法

在Ubuntu系統中,Python日志配置主要通過內置的logging模塊實現,支持代碼直接配置(快速測試)、配置文件配置(靈活維護)及第三方庫擴展(簡化操作)三種方式,以下是具體實現步驟:

一、基礎代碼配置(快速上手)

通過logging.basicConfig()快速設置日志級別、輸出格式和目標,適合臨時調試或簡單項目。

import logging

# 配置日志:級別(DEBUG/INFO/WARNING/ERROR/CRITICAL)、格式、輸出文件(追加模式)
logging.basicConfig(
    level=logging.DEBUG,  # 設置最低日志級別(低于此級別的日志不記錄)
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',  # 日志格式(時間+記錄器名+級別+消息)
    datefmt='%Y-%m-%d %H:%M:%S',  # 時間格式
    filename='app.log',  # 日志文件路徑(Ubuntu下默認在腳本同級目錄)
    filemode='a'  # 文件模式:'a'(追加,默認)或'w'(覆蓋)
)

# 獲取當前模塊的日志記錄器(__name__為當前模塊名,如"main")
logger = logging.getLogger(__name__)

# 記錄不同級別的日志
logger.debug('Debug信息:用于排查問題的詳細日志')  # 僅在level=DEBUG時顯示
logger.info('Info信息:程序正常運行的提示')        # 如功能啟動/完成
logger.warning('Warning信息:潛在問題提醒')        # 如資源即將耗盡
logger.error('Error信息:程序錯誤(不影響運行)')  # 如接口調用失敗
logger.critical('Critical信息:嚴重錯誤(可能導致崩潰)')  # 如系統崩潰

效果:日志會同時輸出到app.log文件和控制臺(默認行為),內容如:
2025-10-01 12:00:00 - __main__ - INFO - Info信息:程序正常運行的提示

二、配置文件管理(靈活維護)

通過INI/YAML/JSON等配置文件分離日志配置與代碼,便于團隊協作和動態調整。以下以INI配置文件為例:

1. 創建配置文件(如logging.conf

在Ubuntu終端使用touch logging.conf創建文件,內容如下:

[loggers]
keys=root,fileLogger  # 定義兩個記錄器:root(默認)和fileLogger(自定義)

[handlers]
keys=consoleHandler,fileHandler  # 定義兩個處理器:控制臺輸出和文件輸出

[formatters]
keys=simpleFormatter  # 定義一種格式化器(日志輸出格式)

# ===== 記錄器配置 =====
[logger_root]
level=INFO  # root記錄器的最低級別(控制臺輸出)
handlers=consoleHandler  # 關聯控制臺處理器

[logger_fileLogger]
level=DEBUG  # 自定義記錄器的最低級別(文件輸出)
handlers=fileHandler  # 關聯文件處理器
qualname=fileLogger  # 記錄器名稱(獲取時用logging.getLogger("fileLogger"))
propagate=0  # 是否向父記錄器傳遞日志(0=不傳遞,避免重復輸出)

# ===== 處理器配置 =====
[handler_consoleHandler]
class=StreamHandler  # 控制臺處理器(輸出到stdout)
level=INFO  # 處理器處理的最低級別
formatter=simpleFormatter  # 關聯格式化器
args=(sys.stdout,)  # 參數:標準輸出流

[handler_fileHandler]
class=FileHandler  # 文件處理器(輸出到文件)
level=DEBUG  # 處理器處理的最低級別
formatter=simpleFormatter  # 關聯格式化器
args=('app.log', 'a')  # 參數:文件路徑(app.log)、模式(追加)

# ===== 格式化器配置 =====
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s  # 日志格式
datefmt=%Y-%m-%d %H:%M:%S  # 時間格式

2. 代碼加載配置文件

import logging
import logging.config

# 加載配置文件(需指定正確路徑,如當前目錄下的logging.conf)
logging.config.fileConfig('logging.conf')

# 獲取自定義記錄器(對應配置文件中的"fileLogger")
logger = logging.getLogger("fileLogger")

# 記錄日志(僅符合fileLogger級別和處理器規則的日志會被輸出)
logger.debug('Debug信息:會寫入文件')  # 寫入app.log
logger.info('Info信息:會輸出到控制臺和文件')  # 同時輸出到控制臺和文件
logger.warning('Warning信息:會輸出到控制臺和文件')

效果

  • 控制臺輸出INFO及以上級別日志(如Info信息:會輸出到控制臺和文件);
  • app.log文件包含DEBUG及以上級別日志(如Debug信息:會寫入文件)。

三、第三方庫簡化配置(推薦進階)

使用loguru庫(需安裝:pip install loguru),無需復雜配置即可實現高級功能(如日志輪轉、格式化、異常捕獲)。

1. 基礎配置示例

from loguru import logger

# 配置日志:輸出到文件(app.log)、日志輪轉(每天1個文件,保留7天)、格式化
logger.add("app.log", 
           rotation="daily",  # 每天輪轉
           retention="7 days",  # 保留7天
           format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message}",  # 格式
           level="DEBUG")  # 最低級別

# 記錄日志(無需獲取記錄器,直接使用logger)
logger.debug('Debug信息:自動寫入文件')
logger.info('Info信息:自動輸出到控制臺和文件')
logger.error('Error信息:自動捕獲異常堆棧')

效果

  • 日志自動寫入app.log,并每天生成新文件(如app.log.2025-10-01);
  • 控制臺輸出彩色格式的日志(更易讀)。

2. 異常捕獲示例

from loguru import logger

@logger.catch  # 裝飾器:自動捕獲函數內的異常并記錄日志
def divide(a, b):
    return a / b

divide(10, 0)  # 觸發ZeroDivisionError,日志會記錄異常堆棧

效果
app.log中會記錄完整的異常信息,包括錯誤類型、堆棧跟蹤和觸發位置。

四、日志輪轉管理(避免文件過大)

日志文件長期運行會占用大量磁盤空間,需通過輪轉(按大小/時間分割)解決。以下是兩種常用方式:

1. 代碼配置(TimedRotatingFileHandler)

import logging
from logging.handlers import TimedRotatingFileHandler

# 創建自定義記錄器
logger = logging.getLogger("rotating_logger")
logger.setLevel(logging.DEBUG)

# 創建定時輪轉處理器(每天午夜輪轉,保留30天)
handler = TimedRotatingFileHandler(
    filename='app_rotating.log',  # 日志文件路徑
    when='midnight',  # 輪轉時間(每天午夜)
    interval=1,  # 間隔天數
    backupCount=30,  # 保留天數
    encoding='utf-8'
)
handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))

# 添加處理器到記錄器
logger.addHandler(handler)

# 記錄日志
logger.info('This log will be rotated daily.')

2. 配置文件配置(RotatingFileHandler)

logging.conf中添加以下配置:

[handler_rotatingFileHandler]
class=logging.handlers.RotatingFileHandler  # 按大小輪轉的文件處理器
level=DEBUG
formatter=simpleFormatter
args=('app_rotating.log', 'a', 1024*1024, 5)  # 參數:文件路徑、模式、最大大?。?MB)、備份數量

效果:當日志文件達到1MB時,自動創建新文件(如app_rotating.log.1),保留最近5個備份。

五、Ubuntu下的注意事項

  1. 文件路徑權限:確保日志文件路徑(如/var/log/python_app/)存在且有寫入權限(可通過sudo mkdir -p /var/log/python_app創建目錄,sudo chown $USER:$USER /var/log/python_app修改權限)。
  2. 環境變量:若配置文件路徑包含環境變量(如%(LOG_DIR)s),需通過os.environ設置(如os.environ['LOG_DIR'] = '/var/log/python_app')。
  3. 日志清理:通過cron任務定期清理舊日志(如每天凌晨刪除7天前的日志):
    # 編輯cron任務(crontab -e)
    0 0 * * * find /var/log/python_app -name "*.log" -mtime +7 -delete
    

以上方法覆蓋了Ubuntu下Python日志配置的常見場景,可根據項目需求選擇合適的方式(簡單項目用代碼配置,復雜項目用配置文件,進階項目用loguru)。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女