【Python练手】logging日志修改,显示成毫秒级时间戳 -> 1628822017676

本文介绍了如何通过修改logging模块的配置,将日志时间格式从可读的日期时间转换为时间戳形式1628822021208,以提高日志输出的简洁性和效率。
该文章已生成可运行项目,
一、初始配置和日志显示
1、配置
format=%(asctime)s.%(msecs)03d %(name)s %(relativeCreated)d %(levelname)s %(module)s %(funcName)s %(message)s
datefmt=%Y/%m/%d %H:%M:%S
2、打印日志
2021/08/12 20:56:59.708 root 13280 INFO login click_mine_tab uicase2
2021/08/12 20:57:00.744 root 14317 INFO login click_avatar uicase3
2021/08/12 20:57:03.091 root 16664 INFO login click_other_login uicase3
2021/08/12 20:57:04.294 root 17866 INFO login click_phone_number uicase3
2021/08/12 20:57:04.933 root 18505 INFO login click_login_next uicase3
2021/08/12 20:57:06.477 root 20049 INFO login click_password_input uicase3
2021/08/12 20:57:07.288 root 20861 INFO login click_login_next2 uicase4

但预期希望显示成时间戳形式-> 类似:1628822021208

二、修改配置
1、直接修改 logging -> init.py
    def formatTime(self, record, datefmt=None):
        """
        Return the creation time of the specified LogRecord as formatted text.

        This method should be called from format() by a formatter which
        wants to make use of a formatted time. This method can be overridden
        in formatters to provide for any specific requirement, but the
        basic behaviour is as follows: if datefmt (a string) is specified,
        it is used with time.strftime() to format the creation time of the
        record. Otherwise, an ISO8601-like (or RFC 3339-like) format is used.
        The resulting string is returned. This function uses a user-configurable
        function to convert the creation time to a tuple. By default,
        time.localtime() is used; to change this for a particular formatter
        instance, set the 'converter' attribute to a function with the same
        signature as time.localtime() or time.gmtime(). To change it for all
        formatters, for example if you want all logging times to be shown in GMT,
        set the 'converter' attribute in the Formatter class.
        """
        ct = self.converter(record.created)
        if datefmt:
            s = time.strftime(datefmt, ct)
        else:
            # s = time.strftime(self.default_time_format, ct)
            # if self.default_msec_format:
            #     s = self.default_msec_format % (s, record.msecs)
            t = time.time()
            nowTime = lambda: int(round(t * 1000))
            s = nowTime()
        return s
2、配置里注掉 datefmt 这一行
format=%(asctime)s.%(msecs)03d %(name)s %(relativeCreated)d %(levelname)s %(module)s %(funcName)s %(message)s
;datefmt=%Y/%m/%d %H:%M:%S
3、再次执行,日志打印
1628822017676 root 7100 INFO login click_mine_tab uicase2
1628822018704 root 8129 INFO login click_avatar uicase3
1628822020039 root 9463 INFO login click_other_login uicase3
1628822021208 root 10633 INFO login click_phone_number uicase3
1628822021730 root 11154 INFO login click_login_next uicase3
1628822023385 root 12809 INFO login click_password_input uicase3
1628822024184 root 13608 INFO login click_login_next2 uicase4

✅ 不错子✌🏻

本文章已经生成可运行项目
<think>首先,用户的问题是:如何在Pythonlogging模块中记录时间戳日志文件。用户提到“将时间戳信息保存到输出文件中”,所以我需要解释如何配置logging模块来包括时间戳。 从系统指令中,我需要: - 使用$...$格式的行内数学表达式,但这个问题是关于logging模块的,可能没有数学内容,所以可能不需要。 - 独立公式用$$...$$,但同样,这里可能不适用。 - 使用中文回答。 -相关问题。 - 在引用的段落末尾添加引用标识,如[^1]。参考了提供的引用,如[^1]、[^2]等,这些是关于logging模块的,所以我应该整合它们。 提供的引用: - [^1]: 关于日志文件分割的处理器。 - [^2]: 关于NullHandler的使用。 - [^3]: 关于basicConfig的配置,包括时间格式。 - [^4]: 关于logging模块的内部文件。 用户的问题焦点是记录时间戳日志文件,所以引用[^3]最相关,因为它提到了format和datefmt参数。 我的回答结构: - 清晰、逐步解决问题。 - 确保真实可靠。 - 使用中文。 步骤: 1. 解释如何配置logging来包括时间戳。 2. 使用basicConfig方法,设置format参数来包括时间戳。 3. 指定datefmt来定制时间格式。 4. 提供一个示例代码。 从引用[^3]: - format: '%(asctime)s' 会添加时间戳- datefmt: 定义时间格式,如 '%a, %Y-%m-%d %H:%M:%S'。 所以,在回答中,我应该: - 描述basicConfig的使用。 - 展示如何设置format和datefmt。 - 给出一个Python代码示例。 - 在相关部分添加引用标识。 最后,生相关问题。 完整回答结构: 1. 介绍问题:用户想在日志中记录时间戳。 2. 解释解决方案:使用logging.basicConfig配置格式。 3. 提供代码示例。 4. 解释关键部分。 5. 添加相关问题。 确保语言是中文。</think>### 在Pythonlogging模块中记录时间戳日志文件 要在Pythonlogging模块中将时间戳信息保存到日志文件中,您可以通过配置日志格式来实现。核心方法是使用`logging.basicConfig()`函数,通过设置`format`参数来包含时间戳占位符`%(asctime)s`,并可选地使用`datefmt`参数自定义时间格式。下面我将逐步解释实现过程,确保配置简单可靠。 #### 步骤详解 1. **理解时间戳记录原理**: - Pythonlogging模块允许您自定义日志消息的格式。`%(asctime)s`是一个内置占位符,代表时间戳(asctime表示“ASCII time”)。 - 默认情况下,`%(asctime)s`会输出类似`2023-10-05 14:30:00,123`的时间戳,但您可以通过`datefmt`参数调整格式。 - 日志输出到文件时,需在`basicConfig()`中指定`filename`参数,确保时间戳被写入文件[^3]。 2. **配置日志格式**: - 使用`logging.basicConfig()`进行全局配置。 - **关键参数**: - `format`: 定义日志消息的模板。包括`%(asctime)s`来嵌入时间戳- `datefmt`: 可选参数,用于自定义时间格式(例如,`%Y-%m-%d %H:%M:%S`表示年--日 时:分:秒)。 - `filename`: 指定日志文件路径,时间戳将直接保存到该文件。 - `level`: 设置日志级别(如`logging.INFO`)。 - 如果不设置`datefmt`,时间戳将使用默认格式;设置后,格式更灵活[^3]。 3. **完整代码示例**: 以下是一个Python脚本示例,演示如何配置logging模块将时间戳记录到文件: ```python import logging # 配置日志设置,包括时间戳 logging.basicConfig( level=logging.INFO, # 设置日志级别为INFO format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # 包含时间戳的格式 datefmt='%Y-%m-%d %H:%M:%S', # 自定义时间格式:年--日 时:分:秒 filename='app.log', # 日志输出到文件app.log filemode='a' # 追加模式,避免覆盖旧日志 ) # 测试日志记录 logging.info("这是一条测试日志时间戳已保存到文件。") ``` - **运行结果**: - 执行脚本后,日志文件`app.log`中会添加一行,如: ``` 2023-10-05 14:30:00 - root - INFO - 这是一条测试日志时间戳已保存到文件。 ``` - 时间戳格式为`%Y-%m-%d %H:%M:%S`,您可以根据需求调整`datefmt`(例如,添加毫秒用`%f`)。 4. **注意事项**: - **文件路径处理**:确保`filename`指定的目录存在,否则会引发异常。建议使用绝对路径(如`/var/log/myapp.log`)以避免权限问题[^3]。 - **高级定制**:如果需要更复杂的日志分割(如按时间或大小分割),可以结合`logging.handlers.TimedRotatingFileHandler`,它支持自动分割文件并保留时间戳[^1]。 - **错误处理**:如果日志文件无法写入,检查文件权限或使用`try-except`捕获IOError。 - **性能影响**:记录时间戳对性能影响很小,但在高频日志场景下,建议使用异步日志处理。 通过以上配置,时间戳会被自动记录到日志文件中。如果您在团队项目中使用,确保所有日志调用一致,避免格式冲突[^4]。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值