簡體   English   中英

創建日志文件

[英]Create a log file

我正在尋找為我的不和諧機器人創建一個日志文件,它是用 python 構建的。

我有幾組命令通過打印命令輸出控制台,我在打印輸出中添加了日期和時間,以便在機器人運行時可以對其進行跟蹤。 但是,將打印輸出也保存到文件中是否容易? 這樣我就可以制作一個日志文件來跟蹤不同的日子和需要的東西。

控制台輸出: Screenshot_1.png

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

異步定義硬幣(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!")

我曾嘗試在網上查看其他一些問題,但看着它們我感到很困惑,因為沒有明確解釋發生了什么以及如何配置它以適用於我的代碼。

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

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

希望這有幫助。 謝謝

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

如果你想創建日志文件時間戳,我們可以使用 datetime 包來完成。 使用時間戳創建日志文件的代碼 -

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

簡單的方法就是使用上面的函數。 此代碼避免重復日志並運行多個日志文件;

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)

有很多方法可以將輸出寫入“.log”文件

日志記錄是一種跟蹤某些文件運行時發生的事件的方法。 也表明某些事件已經發生。

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.INFO)
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

通過使用此方法,您可以將所有內容寫入日志文件

dummylog是一個開源的python 包,可以幫助您輕松維護日志。

GitHub 鏈接在這里

安裝它使用

pip install dummylog

示例代碼:

import dummylog
dl = dummylog.DummyLog()
dl.logger.info('Log File is Created Successfully')
dl.logger.info('Unmayanaa Google Competitors')
dl.logger.error('Vada poche')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM