2 个回答
import logging
import os
from datetime import datetime
from pythonjsonlogger import jsonlogger

# 创建 logger 实例并设置日志级别为 INFO
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# 创建文件处理器,将日志写入指定的文件路径
file_path = os.path.abspath(os.path.dirname(__file__)) + '/apps_price.log'
file_handler = logging.FileHandler(filename=file_path, mode='a')
file_handler.setLevel(logging.INFO)

# 创建自定义 JSON 格式化器
class CustomJsonFormatter(jsonlogger.JsonFormatter):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def add_fields(self, log_record, record, message_dict):
        super().add_fields(log_record, record, message_dict)
        # 将时间戳转换为 ISO 8601 格式
        log_record['date'] = datetime.utcfromtimestamp(record.created).isoformat()

json_formatter = CustomJsonFormatter('%(err_log)s')

# 设置文件处理器的格式化器为自定义 JSON 格式化器
file_handler.setFormatter(json_formatter)

# 将文件处理器添加到 logger 实例中
logger.addHandler(file_handler)

# 记录日志
err_log = "something went wrong"
logger.error({"err_log": err_log})
logger.info({"message": err_log})

你可以使用 Python 自带的 logging 模块和 pythonjsonlogger 来记录 log,并将 log 保存到本地。以下是示例代码:

import logging
import os
import json
from pythonjsonlogger import jsonlogger

# 创建 logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 创建文件 handler
log_file_path = os.path.abspath(os.path.dirname(__file__)) + '/apps_price.log'
file_handler = logging.FileHandler(log_file_path)

# 创建 json formatter
json_formatter = jsonlogger.JsonFormatter('%(asctime)s %(message)s')

# 添加 json formatter 到文件 handler
file_handler.setFormatter(json_formatter)

# 添加文件 handler 到 logger
logger.addHandler(file_handler)

# 记录 log
try:
    # 在这里执行你的代码
    result = 1 / 0  # 抛出除以 0 的异常
except Exception as e:
    # 记录异常信息到 log
    logger.error({'err_log': str(e)}, exc_info=True)

在这个示例中,我们创建了一个 logger,然后创建了一个文件 handler,并将其添加到 logger 中。我们还创建了一个 json formatter,并将其添加到文件 handler 中。最后,我们记录了一个异常,将其转换为 json 格式,并记录到文件中。

这个例子中的 log 格式与你所描述的格式略有不同,但是更加标准和易读。如果你希望使用你所描述的格式,只需将 json_formatter 的格式字符串改为 {"date":"%(asctime)s","err_log":%(message)s}。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏