Python日志的位置主要由應用程序配置或代碼決定,常見場景如下:
settings.py)中通過LOG_FILE或LOG_PATH參數指定日志路徑(例如/var/log/myapp/app.log);代碼中也可能通過logging.basicConfig(filename='/path/to/logfile.log')直接設置。syslog),可通過journalctl命令查看(例如sudo journalctl -u your_app_service_name)。/var/log/下的通用目錄(如/var/log/messages、/var/log/secure),或應用根目錄的logs文件夾中。使用文本編輯器(如vim、nano)或命令行工具查看:
# 使用vim查看(需權限)
vim /var/log/myapp/app.log
# 使用less查看(支持翻頁)
less /var/log/myapp/app.log
注意:若權限不足,需用sudo提升權限(如sudo vim /var/log/myapp/app.log)。
使用tail -f命令實時跟蹤日志文件的新增內容(適用于調試實時問題):
tail -f /var/log/myapp/app.log
# 按Ctrl+C停止實時查看
用grep命令篩選包含關鍵字的日志(如錯誤信息):
# 篩選包含"ERROR"的行
grep "ERROR" /var/log/myapp/app.log
# 結合實時查看(如實時過濾錯誤日志)
tail -f /var/log/myapp/app.log | grep "ERROR"
若應用日志集成到系統日志(如通過rsyslog),可通過journalctl查看:
# 查看指定服務的日志(替換your_app_service_name為實際服務名)
sudo journalctl -u your_app_service_name
# 實時查看系統日志
sudo journalctl -f
# 篩選包含"Python"的日志
sudo journalctl | grep "Python"
通過open()函數讀取日志文件,用字符串方法(如in、split)提取關鍵信息:
# 讀取日志并篩選錯誤信息
def parse_error_logs(log_file):
try:
with open(log_file, 'r') as f:
for line in f:
if "ERROR" in line or "CRITICAL" in line:
print(line.strip())
except Exception as e:
print(f"讀取日志失敗: {e}")
# 調用函數(替換為實際日志路徑)
parse_error_logs("/var/log/myapp/app.log")
將日志轉換為DataFrame,進行統計(如錯誤數量)、排序(如按時間排序):
import pandas as pd
# 讀取日志(假設日志格式為"時間 - 級別 - 消息",用" - "分隔)
log_data = pd.read_csv(
"/var/log/myapp/app.log",
delimiter=" - ",
header=None,
names=["timestamp", "level", "message"]
)
# 統計錯誤日志數量
error_count = log_data[log_data["level"] == "ERROR"].shape[0]
print(f"錯誤日志數量: {error_count}")
# 按時間排序并查看最近的10條錯誤日志
log_data["timestamp"] = pd.to_datetime(log_data["timestamp"])
recent_errors = log_data[log_data["level"] == "ERROR"].sort_values("timestamp").tail(10)
print(recent_errors)
用matplotlib繪制日志趨勢圖(如錯誤日志隨時間的變化):
import matplotlib.pyplot as plt
# 轉換時間格式并排序
log_data["timestamp"] = pd.to_datetime(log_data["timestamp"])
log_data = log_data.sort_values("timestamp")
# 統計每分鐘的錯誤日志數量
error_counts = log_data[log_data["level"] == "ERROR"].set_index("timestamp").resample("1T").count()["message"]
# 繪制折線圖
plt.figure(figsize=(12, 6))
plt.plot(error_counts.index, error_counts.values, marker="o", linestyle="-")
plt.xlabel("時間")
plt.ylabel("錯誤日志數量")
plt.title("Python應用錯誤日志趨勢(最近1小時)")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
RotatingFileHandler或TimedRotatingFileHandler避免日志文件過大(例如每天生成一個新日志文件,保留7天)。apache、nginx或自定義用戶)有權限寫入日志目錄(如/var/log/myapp/)。rsyslog或fluentd將日志發送到遠程服務器(如ELK Stack),實現集中存儲和分析。