首页 文章

创建一个日志文件

提问于
浏览
2

所以我想为我的discord bot创建一个日志文件,它是用python构建的 .

我有几个设置命令通过打印命令输出控制台,我已经添加了一个日期和时间到打印输出,所以它可以在机器人运行时跟踪,但是它很容易使它保存打印输出到一个文件呢?这样我就可以创建一个日志文件来跟踪不同的日期以及所要求的内容 .

控制台输出:Screenshot_1.png

我的代码中的打印命令示例:

异步def硬币(ctx):

author = ctx.message.author
choice = random.randint(1,2)
if choice == 1:
    await bot.say("Heads")
    print(currentTime() + " - Coin Requested by " + str(author) + " It Landed on Heads!")
elif choice == 2:
    await bot.say("Tails")
    print(currentTime() + " - Coin Requested by " + str(author) + " It Landed on Tails!")

我曾尝试在网上查看其他一些问题,但我很困惑地看着它们,因为没有明确的解释是什么发生以及我如何配置它来为我的代码工作 .

3 回答

  • 0

    您可以使用 logging 模块来完成此操作 .

    在最简单的级别,它将设置如下:

    logging.basicConfig(filename="logfilename.log", level=logging.INFO)
    

    您可以使用许多不同的级别来写入文件,例如:

    logging.info('your text goes here')
    logging.error('your text goes here')
    logging.debug('your text goes here')
    

    您可以在要记录到文件的任何位置使用这些行 . 如果要将控制台打印全部一起更换,只需用 logging.info(.......) 替换打印行 .

    有关该主题的更多信息,例如更多可配置选项(例如时间戳),请查看文档:https://docs.python.org/2/library/logging.html

  • 0

    登录python非常高效且易于使用 . 您只需使用python内部日志记录模块定义一个python模块进行日志记录 . 您可以根据需要定义任意数量的 Logger . 您还可以将其配置为将输出打印到控制台以及写入文件 . 除此之外,您还可以定义一个旋转文件处理程序,它也可以进行日志轮换,这有助于日志轮换自动化 . 下面是在任何python模块中直接定义和调用 Logger 的代码片段 .

    import sys
    import logging
    from logging.config import dictConfig
    
    logging_config = dict(
        version=1,
        formatters={
            'verbose': {
                'format': ("[%(asctime)s] %(levelname)s "
                           "[%(name)s:%(lineno)s] %(message)s"),
                'datefmt': "%d/%b/%Y %H:%M:%S",
            },
            'simple': {
                'format': '%(levelname)s %(message)s',
            },
        },
        handlers={
            'api-logger': {'class': 'logging.handlers.RotatingFileHandler',
                               'formatter': 'verbose',
                               'level': logging.DEBUG,
                               'filename': 'logs/api.log',
                               'maxBytes': 52428800,
                               'backupCount': 7},
            'batch-process-logger': {'class': 'logging.handlers.RotatingFileHandler',
                                 'formatter': 'verbose',
                                 'level': logging.DEBUG,
                                 'filename': 'logs/batch.log',
                                 'maxBytes': 52428800,
                                 'backupCount': 7},
            'console': {
                'class': 'logging.StreamHandler',
                'level': 'DEBUG',
                'formatter': 'simple',
                'stream': sys.stdout,
            },
        },
        loggers={
            'api_logger': {
                'handlers': ['api-logger', 'console'],
                'level': logging.DEBUG
            },
            'batch_process_logger': {
                'handlers': ['batch-process-logger', 'console'],
                'level': logging.DEBUG
            }
        }
    )
    
    dictConfig(logging_config)
    
    api_logger = logging.getLogger('api_logger')
    batch_process_logger = logging.getLogger('batch_process_logger')
    

    一旦你定义了这个文件(比如logger_settings.py),你可以将它导入任何地方并使用 .

    from logger_settings import api_logger
    
    api_logger.info('hello world')
    

    希望这有帮助 . 谢谢

  • 7

    要创建日志文件,我们可以在python中使用日志包 . 用于创建日志文件的代码 -

    import logging
    LOG_FILENAME = "logfile.log"
    for handler in logging.root.handlers[:]:
        logging.root.removeHandler(handler)
    logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)    
    logging.info('Forecastiong Job Started...')
    logging.debug('abc method started...')
    

    如果你想创建日志文件时间戳,那么我们可以使用datetime包来完成 . 使用时间戳创建日志文件的代码 -

    from datetime import datetime
    LOG_FILENAME = datetime.now().strftime('D:/log/logfile_%H_%M_%S_%d_%m_%Y.log')
    

相关问题