在Ubuntu上配置Python日志系统主要有以下两种方式:
logging模块通过logging.basicConfig()快速配置,适合简单场景:
import logging
logging.basicConfig(
    level=logging.INFO,  # 日志级别
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',  # 日志格式
    filename='app.log',  # 日志文件路径
    filemode='a'  # 追加模式
)
logger = logging.getLogger(__name__)
logger.info('这是一条普通信息')  # 记录日志
通过INI格式配置文件(如logging.conf)实现复杂需求:
[loggers]
keys=root
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('app.log', 'a')
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger(__name__)
logger.debug('调试信息')  # 会同时输出到控制台和文件
可同时输出到控制台和文件,且设置不同日志级别:
import logging
# 创建日志记录器
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# 控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_formatter = logging.Formatter('%(levelname)s - %(message)s')
console_handler.setFormatter(console_formatter)
logger.addHandler(console_handler)
# 文件处理器
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)
file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(file_formatter)
logger.addHandler(file_handler)
logger.info('信息会同时输出到控制台和文件')
logger.debug('仅输出到文件')
logrotate轮转日志避免日志文件过大,安装并配置logrotate:
sudo apt update
sudo apt install logrotate
/etc/logrotate.d/python_app):/var/log/python_app/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root root
    postrotate
        # 可选:重启服务(需根据实际服务调整)
        # /bin/kill -HUP $(cat /var/run/python_app.pid 2>/dev/null) 2>/dev/null || true
    endscript
}
sudo logrotate -vf /etc/logrotate.d/python_app
适合大规模日志分析,需安装Elasticsearch、Logstash、Kibana,配置略复杂,可参考官方文档。
/etc下。fileConfig或dictConfig,避免硬编码日志路径和级别。encoding='utf-8'。以上配置可根据项目需求选择,基础场景推荐basicConfig,复杂场景优先使用配置文件方式。