You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
4.3 KiB
184 lines
4.3 KiB
|
4 months ago
|
# 新环境日志问题排查指南
|
||
|
|
|
||
|
|
## 问题描述
|
||
|
|
在新环境中运行应用程序时,日志输出到控制台但没有创建日志文件记录。
|
||
|
|
|
||
|
|
## 快速诊断步骤
|
||
|
|
|
||
|
|
### 1. 运行诊断脚本
|
||
|
|
```bash
|
||
|
|
python debug_logging.py
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. 手动测试日志系统
|
||
|
|
```bash
|
||
|
|
python -c "from app.utils.structured_log import get_structured_logger, LogLevel; logger = get_structured_logger('test', LogLevel.DEBUG); logger.info('测试日志'); logger.error('测试错误日志')"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. 检查logs目录
|
||
|
|
```bash
|
||
|
|
# 检查logs目录是否存在
|
||
|
|
ls -la logs/
|
||
|
|
|
||
|
|
# 检查日志文件是否创建
|
||
|
|
ls -la logs/app.log logs/error.log
|
||
|
|
```
|
||
|
|
|
||
|
|
## 常见问题及解决方案
|
||
|
|
|
||
|
|
### 问题1: logs目录不存在
|
||
|
|
**症状**: 控制台输出日志,但logs目录不存在
|
||
|
|
**解决方案**:
|
||
|
|
```python
|
||
|
|
# 结构化日志系统会自动创建logs目录
|
||
|
|
# 如果手动创建,确保有写入权限
|
||
|
|
import os
|
||
|
|
os.makedirs("logs", exist_ok=True)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 问题2: 权限不足
|
||
|
|
**症状**: 日志输出到控制台,但无法创建文件
|
||
|
|
**解决方案**:
|
||
|
|
```bash
|
||
|
|
# Linux/Mac: 检查目录权限
|
||
|
|
ls -la logs/
|
||
|
|
chmod 755 logs/
|
||
|
|
|
||
|
|
# Windows: 以管理员身份运行或检查文件夹权限
|
||
|
|
# 右键logs文件夹 -> 属性 -> 安全 -> 编辑权限
|
||
|
|
```
|
||
|
|
|
||
|
|
### 问题3: 磁盘空间不足
|
||
|
|
**症状**: 日志输出到控制台,但文件创建失败
|
||
|
|
**解决方案**:
|
||
|
|
```bash
|
||
|
|
# 检查磁盘空间
|
||
|
|
df -h # Linux/Mac
|
||
|
|
dir # Windows
|
||
|
|
|
||
|
|
# 清理空间或更改日志目录
|
||
|
|
```
|
||
|
|
|
||
|
|
### 问题4: 路径问题
|
||
|
|
**症状**: 工作目录不正确导致文件创建在错误位置
|
||
|
|
**解决方案**:
|
||
|
|
```python
|
||
|
|
# 确保在正确的目录下运行
|
||
|
|
import os
|
||
|
|
print("当前工作目录:", os.getcwd())
|
||
|
|
print("logs目录绝对路径:", os.path.abspath("logs"))
|
||
|
|
```
|
||
|
|
|
||
|
|
### 问题5: 编码问题
|
||
|
|
**症状**: 文件创建但内容乱码或无法写入中文
|
||
|
|
**解决方案**:
|
||
|
|
```python
|
||
|
|
# 确保使用UTF-8编码
|
||
|
|
file_handler = logging.FileHandler("logs/app.log", encoding='utf-8')
|
||
|
|
```
|
||
|
|
|
||
|
|
## 环境检查清单
|
||
|
|
|
||
|
|
### ✅ 基础环境
|
||
|
|
- [ ] Python版本 >= 3.7
|
||
|
|
- [ ] 工作目录正确
|
||
|
|
- [ ] 有足够的磁盘空间
|
||
|
|
- [ ] 有目录写入权限
|
||
|
|
|
||
|
|
### ✅ 日志系统
|
||
|
|
- [ ] 结构化日志模块可以导入
|
||
|
|
- [ ] 日志记录器可以创建
|
||
|
|
- [ ] 日志可以输出到控制台
|
||
|
|
- [ ] logs目录可以创建
|
||
|
|
- [ ] 日志文件可以写入
|
||
|
|
|
||
|
|
### ✅ 文件系统
|
||
|
|
- [ ] logs目录存在且有写入权限
|
||
|
|
- [ ] app.log文件可以创建和写入
|
||
|
|
- [ ] error.log文件可以创建和写入
|
||
|
|
- [ ] 文件编码为UTF-8
|
||
|
|
|
||
|
|
## 调试命令
|
||
|
|
|
||
|
|
### 检查环境信息
|
||
|
|
```bash
|
||
|
|
# Python版本
|
||
|
|
python --version
|
||
|
|
|
||
|
|
# 当前目录
|
||
|
|
pwd # Linux/Mac
|
||
|
|
cd # Windows
|
||
|
|
|
||
|
|
# 目录权限
|
||
|
|
ls -la logs/ # Linux/Mac
|
||
|
|
dir logs # Windows
|
||
|
|
```
|
||
|
|
|
||
|
|
### 测试文件写入
|
||
|
|
```bash
|
||
|
|
# 测试基本文件写入
|
||
|
|
python -c "with open('logs/test.txt', 'w') as f: f.write('test')"
|
||
|
|
|
||
|
|
# 测试日志文件写入
|
||
|
|
python -c "import logging; logging.basicConfig(filename='logs/test.log'); logging.info('test')"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 检查日志文件内容
|
||
|
|
```bash
|
||
|
|
# 查看app.log
|
||
|
|
tail -f logs/app.log
|
||
|
|
|
||
|
|
# 查看error.log
|
||
|
|
tail -f logs/error.log
|
||
|
|
|
||
|
|
# 统计行数
|
||
|
|
wc -l logs/app.log logs/error.log
|
||
|
|
```
|
||
|
|
|
||
|
|
## 日志系统配置
|
||
|
|
|
||
|
|
### 结构化日志配置
|
||
|
|
```python
|
||
|
|
from app.utils.structured_log import get_structured_logger, LogLevel
|
||
|
|
|
||
|
|
# 创建日志记录器
|
||
|
|
logger = get_structured_logger("module_name", LogLevel.INFO)
|
||
|
|
|
||
|
|
# 记录日志
|
||
|
|
logger.info("信息日志", extra_param="value")
|
||
|
|
logger.error("错误日志", error_code=500)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 日志文件结构
|
||
|
|
```
|
||
|
|
logs/
|
||
|
|
├── app.log # 正常日志(DEBUG、INFO、WARNING)
|
||
|
|
├── error.log # 错误日志(ERROR、CRITICAL)
|
||
|
|
└── *.log # 其他模块特定日志
|
||
|
|
```
|
||
|
|
|
||
|
|
## 故障排除流程
|
||
|
|
|
||
|
|
1. **运行诊断脚本** → 获取详细环境信息
|
||
|
|
2. **检查基础环境** → 确认Python、目录、权限
|
||
|
|
3. **测试基础日志** → 验证logging模块功能
|
||
|
|
4. **测试结构化日志** → 验证自定义日志系统
|
||
|
|
5. **检查文件权限** → 确认文件系统访问
|
||
|
|
6. **查看错误信息** → 分析具体错误原因
|
||
|
|
|
||
|
|
## 联系支持
|
||
|
|
|
||
|
|
如果按照以上步骤仍无法解决问题,请提供:
|
||
|
|
|
||
|
|
1. 诊断脚本的完整输出
|
||
|
|
2. 操作系统和Python版本信息
|
||
|
|
3. 错误信息和堆栈跟踪
|
||
|
|
4. 环境配置信息
|
||
|
|
|
||
|
|
## 预防措施
|
||
|
|
|
||
|
|
1. **定期备份日志配置**
|
||
|
|
2. **监控磁盘空间使用**
|
||
|
|
3. **设置日志轮转机制**
|
||
|
|
4. **定期检查日志文件权限**
|
||
|
|
5. **在新环境部署前运行诊断脚本**
|