web-dev-qa-db-ja.com

ログファイルを作成する

だから、Pythonで構築された不協和音ボットのログファイルを作成しようとしています。

印刷コマンドを介してコンソールを出力するいくつかの設定コマンドがあり、ボットの実行時に追跡できるように印刷出力に日付と時刻を追加しましたが、印刷出力を保存するのは簡単ですか?ファイルも?そうすれば、ログファイルを作成して、異なる日と何が求められたかを追跡できます。

コンソール出力: 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
Kynakuu

これを行うには、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

9
Harrison

ログファイルを作成するには、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('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')
3
Brijesh Rana

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

この助けを願っています。ありがとう

0
Tasneem Haider