import logging
import os
from logging.handlers import RotatingFileHandler

def log(log_file="zabbix.log", max_bytes=10 * 1024 * 1024, backup_count=5):
    """
    配置日志记录器，输出到/home/zabbix目录且不显示在控制台
    
    参数:
        log_file: 日志文件名 (默认: zabbix.log)
        max_bytes: 单个日志文件最大字节 (默认: 10MB)
        backup_count: 保留的备份文件数 (默认: 5)
    """
    # 创建日志目录
    log_dir = "/home/zabbix"
    os.makedirs(log_dir, exist_ok=True)  # 自动创建目录[1,4](@ref)
    
    # 完整的日志文件路径
    log_path = os.path.join(log_dir, log_file)
    
    # 创建记录器
    logger = logging.getLogger("ZabbixLogger")
    logger.setLevel(logging.DEBUG)  # 设置最低日志级别
    
    # 配置日志格式
    formatter = logging.Formatter(
        '%(asctime)s - %(filename)s:%(lineno)d - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    
    # 创建文件处理器（带日志轮转功能）[1,3](@ref)
    file_handler = RotatingFileHandler(
        log_path,
        maxBytes=max_bytes,
        backupCount=backup_count,
        encoding='utf-8'
    )
    file_handler.setFormatter(formatter)
    file_handler.setLevel(logging.INFO)  # 文件日志级别
    
    # 移除所有现有处理器（避免重复）
    if logger.hasHandlers():
        logger.handlers.clear()
    
    # 添加文件处理器（不添加StreamHandler避免控制台输出）[6,8](@ref)
    logger.addHandler(file_handler)
    
    # 禁用向父logger传播（避免root logger输出到控制台）[9](@ref)
    logger.propagate = False
    
    return logger

# 使用示例
if __name__ == "__main__":
    # 初始化日志记录器
    zabbix_logger = setup_zabbix_logger()
    
    # 记录不同级别日志
    zabbix_logger.debug("调试信息（不会出现在文件）")
    zabbix_logger.info("服务启动")
    zabbix_logger.warning("磁盘空间不足")
    zabbix_logger.error("数据库连接失败")