首页 > 解决方案 > 如何在 datetime 模块中格式化我的输出?

问题描述

所以,我只是在处理 python3 中的 datetime 和 logging 模块,我试图从 datatime 模块中获取时间戳,以便与 logging 事件一起出现。

我希望输出看起来像:7/16/20 22:18:20 DEBUG Test1 调试消息

我的问题:我无法让数据和时间出现在我的日志记录事件的左侧。

from datetime import datetime

logging.basicConfig(level=logging.DEBUG,
                    datefmt='%m/%d/%Y %H:%M:%S',
                    filemode='a')


def set_logger(name):
    date_str = datetime.now().strftime("%Y_%m_%d")
    file_name = name + "_" + date_str
    if file_name:
        logger = logging.getLogger(name)
        logger.addHandler(logging.FileHandler(file_name))
        return logger


logger = set_logger("Test1")

logger.debug('Test1 debug message')
logger.info('Test1 info message')
logger.warning('Test1 warning message')
logger.error('Test1 error message')

logger = set_logger("Test2")

logger.debug('Test2 debug message')
logger.info('Test2 info message')
logger.warning('Test2 warning message')
logger.error('Test2 error message')


logger = set_logger("Test3")

logger.debug('Test3 debug message')
logger.info('Test3 info message')
logger.warning('Test3 warning message')
logger.error('Test3 error message')

即使将 date_str 添加到 file_name 它仍然不会在我的控制台中打印。:/

标签: pythondatetimelogging

解决方案


始终仔细阅读文档,我知道这可能很乏味(尤其是日期和时间),但它通常会在未来提供巨大的帮助。

logging 模块中的 basicConfig 方法可以采用格式选项。它被初始化为格式化字符串,看起来像

FORMAT = '%(asctime)s: %(levelname)s: %(message)s'

现在格式已初始化,您可以将其传递给 basicConfig 中的格式选项

logging.basicConfig(level=logging.DEBUG,
                    format=FORMAT, 
                    datefmt='%m/%d/%Y %H:%M:%S',
                    filemode='a')

那应该给你想要的输出 07/16/2020 21:40:23: DEBUG: Test1 debug message......等等

您也不需要 set_logger 函数中的 if 语句


所以你的代码应该是这样的:

import logging
from datetime import datetime

FORMAT = '%(asctime)s: %(levelname)s: %(message)s'

logging.basicConfig(level=logging.DEBUG,
                    format=FORMAT,
                    datefmt='%m/%d/%Y %H:%M:%S',
                    filemode='a')


def set_logger(name):
    date_str = datetime.now().strftime("%Y_%m_%d")
    file_name = name + "_" + date_str
    logger = logging.getLogger(name)
    logger.addHandler(logging.FileHandler(file_name))
    return logger


logger = set_logger("Test1")

logger.debug('Test1 debug message')
logger.info('Test1 info message')
logger.warning('Test1 warning message')
logger.error('Test1 error message')

logger = set_logger("Test2")

logger.debug('Test2 debug message')
logger.info('Test2 info message')
logger.warning('Test2 warning message')
logger.error('Test2 error message')


logger = set_logger("Test3")

logger.debug('Test3 debug message')
logger.info('Test3 info message')
logger.warning('Test3 warning message')
logger.error('Test3 error message')

您可以在此处阅读文档: https ://docs.python.org/3/library/logging.html#logging.Formatter https://docs.python.org/3/library/datetime.html


推荐阅读