溫馨提示×

CentOS Python日志管理如何操作

小樊
51
2025-10-01 00:34:50
欄目: 編程語言

CentOS下Python日志管理操作指南

一、基礎環境準備

確保CentOS系統已安裝Python 3及pip(Python包管理器),若未安裝可通過以下命令完成:

sudo yum install python3 python3-pip -y

驗證安裝:

python3 --version  # 檢查Python版本
pip3 --version     # 檢查pip版本

二、快速配置日志(基礎版)

使用logging.basicConfig()快速設置日志輸出到文件和控制臺,適用于簡單場景:

import logging

# 配置日志:級別(DEBUG/INFO/WARNING/ERROR/CRITICAL)、格式、文件、模式
logging.basicConfig(
    level=logging.INFO,  # 設置最低日志級別(低于此級別的不記錄)
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',  # 日志格式(時間、模塊名、級別、消息)
    filename='app.log',  # 日志文件路徑(當前目錄)
    filemode='a'         # 文件模式('a'=追加,'w'=覆蓋)
)

# 獲取logger實例(推薦使用模塊名__name__,便于區分不同模塊日志)
logger = logging.getLogger(__name__)

# 記錄不同級別日志
logger.debug('Debug信息(調試用,生產環境建議關閉)')
logger.info('程序正常運行的信息')
logger.warning('警告信息(潛在問題)')
logger.error('錯誤信息(功能異常)')
logger.critical('嚴重錯誤信息(系統可能崩潰)')

運行腳本后,當前目錄會生成app.log文件,包含上述日志內容。

三、日志輪轉(防止文件過大)

當日志文件過大時,需通過輪轉壓縮舊日志,節省存儲空間。Python提供兩種輪轉方式:

1. 按文件大小輪轉(RotatingFileHandler)

當日志文件達到指定大?。ㄈ?0MB)時,自動創建新文件并保留指定數量(如5個)的舊日志:

from logging.handlers import RotatingFileHandler

logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)

# 創建RotatingFileHandler:maxBytes=10MB,backupCount=5(保留5個備份)
handler = RotatingFileHandler(
    'app_rotating.log',
    maxBytes=10 * 1024 * 1024,  # 10MB
    backupCount=5
)
handler.setLevel(logging.INFO)

# 設置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

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

# 測試日志記錄
for i in range(1000):
    logger.info(f'這是第{i}條日志信息')

運行后,會生成app_rotating.log(當前日志)和app_rotating.log.1~app_rotating.log.5(舊日志)。

2. 按時間輪轉(TimedRotatingFileHandler)

按時間間隔(如每天、每小時)自動創建新日志文件,適合長期運行的應用:

from logging.handlers import TimedRotatingFileHandler

logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)

# 創建TimedRotatingFileHandler:when='midnight'(每天凌晨),interval=1(每天),backupCount=7(保留7天)
handler = TimedRotatingFileHandler(
    'app_timed.log',
    when='midnight',  # 時間間隔(midnight=凌晨0點,hourly=每小時)
    interval=1,       # 間隔數量(如1表示每天/每小時)
    backupCount=7     # 保留舊日志天數
)
handler.setLevel(logging.INFO)

# 設置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

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

# 測試日志記錄
logger.info('這是一條按時間輪轉的日志')

運行后,每天凌晨會生成新的app_timed.log,并保留最近7天的舊日志。

四、發送日志到系統日志(syslog)

若需將Python日志集成到CentOS系統日志(如/var/log/messages),可使用SysLogHandler

import logging
from logging.handlers import SysLogHandler

logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)

# 創建SysLogHandler:address='/dev/log'(CentOS系統日志地址)
handler = SysLogHandler(address='/dev/log')
handler.setLevel(logging.INFO)

# 設置日志格式(syslog專用格式)
formatter = logging.Formatter('%(name)s: %(levelname)s %(message)s')
handler.setFormatter(formatter)

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

# 測試日志記錄
logger.info('這是一條發送到系統日志的信息')

運行后,日志會出現在/var/log/messages中(需root權限查看):

sudo tail -f /var/log/messages

五、使用配置文件管理日志(推薦)

對于復雜項目,建議使用INI格式的配置文件(如logging.conf)管理日志,便于維護和修改:

1. 創建配置文件logging.conf

[loggers]
keys=root,my_logger  # 定義logger名稱(root為根logger,my_logger為自定義logger)

[handlers]
keys=fileHandler,consoleHandler  # 定義處理器名稱(fileHandler=文件,consoleHandler=控制臺)

[formatters]
keys=simpleFormatter  # 定義格式化器名稱

# 配置root logger(默認logger)
[logger_root]
level=DEBUG
handlers=consoleHandler  # 只輸出到控制臺

# 配置自定義logger(my_logger)
[logger_my_logger]
level=INFO
handlers=fileHandler,consoleHandler  # 輸出到文件和控制臺
qualname=my_logger  # logger名稱(需與代碼中getLogger一致)
propagate=0         # 是否向父logger傳遞(0=不傳遞)

# 配置文件處理器
[handler_fileHandler]
class=FileHandler
level=INFO
formatter=simpleFormatter
args=('app_config.log', 'a')  # 日志文件路徑和模式

# 配置控制臺處理器
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)  # 輸出到控制臺

# 配置格式化器
[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.config.fileConfig('logging.conf')

# 獲取自定義logger
logger = logging.getLogger('my_logger')

# 記錄日志
logger.debug('Debug信息(不會輸出到文件,因為fileHandler級別為INFO)')
logger.info('Info信息(輸出到文件和控制臺)')
logger.warning('Warning信息(輸出到文件和控制臺)')

配置文件的優勢在于:集中管理日志設置(如級別、格式、處理器),無需修改代碼即可調整日志行為。

六、日志查看與管理

1. 查看日志文件

使用cat、tail等命令查看日志文件內容:

cat app.log          # 查看完整日志
tail -f app.log      # 實時查看日志更新(按Ctrl+C退出)
tail -n 20 app.log   # 查看最后20行日志

2. 使用logrotate管理日志(系統級)

若需更強大的日志輪轉功能(如自動壓縮、刪除舊日志),可使用CentOS自帶的logrotate工具。創建自定義配置文件/etc/logrotate.d/my_python_app

/var/log/myapp.log {  # 日志文件路徑(需與Python日志路徑一致)
    daily             # 每天輪轉
    rotate 7          # 保留7個舊日志
    compress          # 壓縮舊日志(如app.log.1.gz)
    missingok         # 日志文件不存在時不報錯
    notifempty        # 日志為空時不輪轉
    create 640 root adm  # 創建新日志的權限和所有者
}

測試logrotate配置:

sudo logrotate -vf /etc/logrotate.d/my_python_app  # 強制輪轉并顯示詳細信息

logrotate會自動處理日志輪轉,無需修改Python代碼。

七、注意事項

  1. 日志級別選擇:生產環境建議設置為INFOWARNING,避免輸出過多DEBUG日志影響性能;開發環境可設置為DEBUG方便排查問題。
  2. 日志文件權限:確保日志文件的目錄有寫入權限(如chmod 755 /path/to/logs),避免因權限問題導致日志無法寫入。
  3. 敏感信息過濾:避免在日志中記錄密碼、密鑰等敏感信息,可通過自定義FormatterFilter過濾。
  4. 性能優化:高頻日志記錄(如循環內)建議使用異步日志(如concurrent-log-handler庫),避免阻塞主線程。

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