创建一个日志文件

Kyn*_*kuu 5 python logging python-3.x

所以我想为我的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!")
Run Code Online (Sandbox Code Playgroud)

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

Tas*_*der 10

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

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')
Run Code Online (Sandbox Code Playgroud)

一旦定义了此文件(例如 logger_settings.py),您就可以将其导入到任何地方并使用。

from logger_settings import api_logger

api_logger.info('hello world')
Run Code Online (Sandbox Code Playgroud)

希望这有帮助。谢谢


Har*_*son 9

您可以使用该logging模块来完成此任务.

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

logging.basicConfig(filename="logfilename.log", level=logging.INFO)
Run Code Online (Sandbox Code Playgroud)

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

logging.info('your text goes here')
logging.error('your text goes here')
logging.debug('your text goes here')
Run Code Online (Sandbox Code Playgroud)

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

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


Bri*_*ana 5

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

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('Forecasting Job Started...')
logging.debug('abc method started...')
Run Code Online (Sandbox Code Playgroud)

如果您想创建日志文件时间戳,我们可以使用 datetime 包来完成。创建带有时间戳的日志文件的代码 -

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