fix: Windows syslog兼容 + API设计文档

This commit is contained in:
xiaji
2026-06-07 18:09:35 +08:00
parent 22e3e09b24
commit 0e318b1c36
2 changed files with 113 additions and 28 deletions

View File

@@ -198,79 +198,91 @@ FILE_UPLOAD_MAX_MEMORY_SIZE = 524288000
CELERY_BROKER_URL = 'redis://:xjjq1234!@localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://:xjjq1234!@localhost:6379/0'
import sys
_is_linux = sys.platform == 'linux'
_syslog_handler = {
'level': 'WARNING',
'class': 'logging.handlers.SysLogHandler',
'address': '/dev/log',
'facility': 'local0',
'formatter': 'syslog',
} if _is_linux else {
'level': 'WARNING',
'class': 'logging.handlers.RotatingFileHandler',
'filename': str(LOG_DIR / 'syslog.log'),
'maxBytes': 1024 * 1024 * 50,
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8',
}
LOGGING = {
'version': 1,
'disable_existing_loggers': False, # 不关闭已存在的日志器
'disable_existing_loggers': False,
'formatters': {
'standard': { # 统一的标准日志格式
'standard': {
'format': '[%(asctime)s] [%(levelname)s] [%(process)d] [%(module)s] %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S'
},
'syslog': { # syslog格式用于fail2ban检测
'syslog': {
'format': '%(name)s: %(levelname)s %(message)s'
},
},
'handlers': {
'file': { # 日志写入文件的处理器
'level': 'INFO', # 日志级别INFO及以上都记录ERROR/WARNING/INFO
'class': 'logging.handlers.RotatingFileHandler', # 日志轮转,防止文件过大
# ✅ 核心pathlib对象转字符串logging只接收字符串路径必转
'file': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': str(LOG_DIR / 'all_in_one.log'),
'maxBytes': 1024 * 1024 * 100, # 单个日志文件最大100MB
'backupCount': 10, # 最多保留10个日志备份
'formatter': 'standard', # 使用上面定义的统一格式
'encoding': 'utf-8', # 编码,防止中文乱码
'maxBytes': 1024 * 1024 * 100,
'backupCount': 10,
'formatter': 'standard',
'encoding': 'utf-8',
},
'console': { # 兼容控制台输出(开发调试用,不影响生产)
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
'syslog': { # syslog处理器用于fail2ban检测登录失败
'level': 'WARNING',
'class': 'logging.handlers.SysLogHandler',
'address': '/dev/log', # Linux系统日志socket
'facility': 'local0',
'formatter': 'syslog',
},
'auth_file': { # 认证日志文件处理器(备选方案)
'syslog': _syslog_handler,
'auth_file': {
'level': 'WARNING',
'class': 'logging.handlers.RotatingFileHandler',
'filename': str(LOG_DIR / 'auth.log'),
'maxBytes': 1024 * 1024 * 50, # 50MB
'maxBytes': 1024 * 1024 * 50,
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8',
},
},
# 所有日志器配置和原配置完全一致,无需任何修改
'loggers': {
'django': { # Django核心日志
'django': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True,
},
'django.request': { # Django的请求日志
'django.request': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True,
},
'django.security.login': { # 登录安全日志用于fail2ban
'django.security.login': {
'handlers': ['syslog', 'auth_file'],
'level': 'WARNING',
'propagate': False,
},
'celery': { # Celery客户端日志Django中提交任务的日志
'celery': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True,
},
'utils.tasks': { # Celery邮件任务模块
'utils.tasks': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True,
},
'utils.email_utils': { # 邮件配置模块
'utils.email_utils': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True,