如何在Loguru中设置时区?以塔什干(UTC+5)为例
解决Loguru日志输出塔什干时区(UTC+5)的问题
要让Loguru输出塔什干时区(标准时区ID为Asia/Tashkent,对应UTC+5)的日志时间,核心是利用Loguru的format_time参数自定义时间转换逻辑,将默认的UTC时间转为目标时区时间。以下是几种可行方案:
方案1:使用pendulum库(简洁易用)
如果你已安装pendulum,直接通过format_time传入lambda函数转换时区:
from loguru import logger import pendulum logger.add( "tashkent_app.log", format="{time} | {level: <8} | {message}", # 将UTC时间转为塔什干时区并格式化 format_time=lambda t: pendulum.instance(t).in_timezone("Asia/Tashkent").strftime("%Y-%m-%d %H:%M:%S") ) # 测试输出 logger.info("这是一条塔什干时区的日志")
方案2:使用Python标准库zoneinfo(Python 3.9+)
无需额外安装依赖,用Python3.9自带的zoneinfo模块即可:
from loguru import logger from zoneinfo import ZoneInfo def format_tashkent_time(time_obj): # 把Loguru默认的UTC时间转为塔什干时区 tashkent_time = time_obj.astimezone(ZoneInfo("Asia/Tashkent")) return tashkent_time.strftime("%Y-%m-%d %H:%M:%S") logger.add( "tashkent_app.log", format="{time} | {level: <8} | {message}", format_time=format_tashkent_time ) # 测试输出 logger.info("这是一条塔什干时区的日志")
方案3:使用pytz(兼容Python 3.8及以下)
针对旧版本Python,用pytz库处理时区:
from loguru import logger import pytz def format_tashkent_time(time_obj): tashkent_tz = pytz.timezone("Asia/Tashkent") tashkent_time = time_obj.astimezone(tashkent_tz) return tashkent_time.strftime("%Y-%m-%d %H:%M:%S") logger.add( "tashkent_app.log", format="{time} | {level: <8} | {message}", format_time=format_tashkent_time ) # 测试输出 logger.info("这是一条塔什干时区的日志")
关键说明
- Loguru默认输出的
time是UTC时区的datetime对象,通过format_time直接干预时间格式化逻辑,无需修改record原始数据。 - 使用标准时区ID
Asia/Tashkent比硬写UTC+5更可靠,能自动适配时区规则变动(塔什干目前无夏令时,但规范写法通用性更强)。
内容的提问来源于stack exchange,提问作者Abdurahmon Rahmonov
相关产品推荐
相关产品推荐

