feat: log

This commit is contained in:
DengDai
2025-11-24 21:04:58 +08:00
parent ae208d6b39
commit c9e11c4bd1
8 changed files with 180 additions and 156 deletions

View File

@@ -6,33 +6,33 @@ from flask_session import Session
from flask_wtf.csrf import CSRFProtect
from config import config
from flask_bootstrap import Bootstrap
import logging
from logging.handlers import RotatingFileHandler
import os
from datetime import datetime, timedelta
import glob
# 初始化扩展,但此时不传入 app
# 初始化扩展
db = SQLAlchemy()
migrate = Migrate()
login_manager = LoginManager()
sess = Session()
csrf = CSRFProtect()
bootstrap = Bootstrap()
# login_manager 的基本配置
login_manager.login_view = 'auth.login' # 后面我们会创建一个叫 'auth' 的蓝图
login_manager.login_view = 'auth.login'
def create_app(config_name='default'):
"""
应用工厂函数
:param config_name: 配置名称 ('development', 'production')
:return: Flask app instance
"""
"""应用工厂函数创建并配置Flask应用实例"""
app = Flask(__name__)
# 1. 加载配置
# 加载配置
app.config.from_object(config[config_name])
config[config_name].init_app(app)
# 信任代理转发的头信息
# 配置代理转发
from werkzeug.middleware.proxy_fix import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1)
# 2. 初始化扩展
# 初始化扩展
db.init_app(app)
migrate.init_app(app, db)
login_manager.init_app(app)
@@ -40,17 +40,36 @@ def create_app(config_name='default'):
csrf.init_app(app)
bootstrap.init_app(app)
# 配置日志
if not os.path.exists('logs'):
os.mkdir('logs')
# 清理过期日志
log_retention_days = int(os.environ.get('LOG_RETENTION_DAYS', 7))
cutoff_time = datetime.now() - timedelta(days=log_retention_days)
for log_file in glob.glob('logs/*.log*'):
if os.path.getmtime(log_file) < cutoff_time.timestamp():
os.remove(log_file)
file_handler = RotatingFileHandler('logs/pt_blacklist.log', maxBytes=10240000, backupCount=10)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
))
file_handler.setLevel(logging.INFO)
app.logger.addHandler(file_handler)
app.logger.setLevel(logging.INFO)
app.logger.info('PT黑名单系统启动')
# 注册自定义过滤器
from .filters import translate_status, translate_reason
app.jinja_env.filters['translate_status'] = translate_status
app.jinja_env.filters['translate_reason'] = translate_reason
# 3. 注册蓝图 (Blueprint)
# 后面我们会在这里添加蓝图
# 注册蓝图
from .routes import main as main_blueprint
app.register_blueprint(main_blueprint)
from .auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint, url_prefix='/auth')
return app