You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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原始数据。
  • 使用标准时区IDAsia/Tashkent比硬写UTC+5更可靠,能自动适配时区规则变动(塔什干目前无夏令时,但规范写法通用性更强)。

内容的提问来源于stack exchange,提问作者Abdurahmon Rahmonov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:33:21