创建一个日志文件

时间:2018-03-30 19:31:31

标签: python python-3.x logging

所以我正在为我的discord bot创建一个日志文件,该文件是用python构建的。

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

控制台输出: Screenshot_1.png

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

async def coin(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!")

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

5 个答案:

答案 0 :(得分:8)

您可以使用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(.......)

替换打印行

有关该主题的更多信息,例如更多可配置选项(例如时间戳),请查看文档:{​​{3}}

答案 1 :(得分:1)

要创建日志文件,我们可以使用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')

答案 2 :(得分:0)

登录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')

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

from logger_settings import api_logger

api_logger.info('hello world')

希望这有帮助。感谢

答案 3 :(得分:0)

简单的方法是使用上面的函数。 此代码避免重复的日志,并运行多个日志文件;

import logging

def LOG_insert(file, format, text, level):
    infoLog = logging.FileHandler(file)
    infoLog.setFormatter(format)
    logger = logging.getLogger(file)
    logger.setLevel(level)
    
    if not logger.handlers:
        logger.addHandler(infoLog)
        if (level == logging.INFO):
            logger.info(text)
        if (level == logging.ERROR):
            logger.error(text)
        if (level == logging.WARNING):
            logger.warning(text)
    
    infoLog.close()
    logger.removeHandler(infoLog)
    
    return

formatLOG = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
LOG_insert("file.log", formatLOG , "New log", logging.INFO)

答案 4 :(得分:0)

有很多方法可以将输出写入'.log'文件

日志记录是一种跟踪文件运行时发生的事件的方法。也表示发生了某些事件。

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This is debug message')
logging.info('This is information message')
logging.warning('This is warning message')
logging.error('This is warning message')

用于减少所有事情的另一种方法,使您打印到控制台的所有内容都将保存到“日志”文件中

python abc.py > abc.log

通过使用这种方法,您可以将所有内容写入日志文件