ホームページ バックエンド開発 Python チュートリアル Pythonロギングモジュールのロギング

Pythonロギングモジュールのロギング

Feb 22, 2017 am 09:23 AM
python

モジュールレベルの関数

logging.getLogger([name]): ロガーオブジェクトを返します。名前が指定されていない場合は、ルートロガーが返されます

logging.debug()、logging.info()、logging.warning ()、logging.error()、logging.critical(): ルート ロガーのログ レベルを設定します

logging.basicConfig(): デフォルトのフォーマッタを使用してロギング システムの StreamHandler を作成し、基本構成を設定して追加しますルートロガーに送信します

Logger

logging .getLogger([name])

名前が指定されていない場合は、ルートロガーを返します。

すべてのプログラムは、情報を出力する前にロガーを取得する必要があります。ロガーは通常、プログラムのモジュール名に対応します。たとえば、チャット ツールのグラフィカル インターフェイス モジュールは次のようにロガーを取得できます:

LOG=logging.getLogger("chat.gui")

そして、コア モジュールは次のように取得できます。次のように:

LOG=logging .getLogger("chat.kernel")

Logger.setLevel(logging.WARNING): WARNING より低いレベルは無視されます

Logger.addFilter(filt) )、Logger.removeFilter(filt): 指定されたフィルターを追加または削除します

Logger.addHandler(hdlr)、Logger.removeHandler(hdlr): 指定されたハンドラーを追加または削除します

Handlers

handlerオブジェクトが担当します関連情報を指定された宛先に送信します。ファイル、画面、ネットワーク、ソケットなどを指定できます。

Handler.setLevel(lel): 処理する情報のレベルを指定します。 lel レベル未満の情報は無視されます。

Handler.setFormatter(): を選択します。このハンドラーの出力形式

Handler.addFilter(filt)、Handler.removeFilter(filt): フィルターオブジェクトを追加または削除します

ログは画面に出力されます

import logging

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

 

返回:
WARNING:root:This is warning message

打印到屏幕
ログイン後にコピー

デフォルトでは、logging はログを画面に出力します

ログ レベルとサイズの関係は次のとおりです。もちろん、ログ レベルを自分で定義することもできます。

ログ出力のフォーマット


logging.basicConfig関数パラメータ:
filename: ログファイル名を指定します
filemode: file関数と同じ意味で、ログファイルを開くモード、'w'または'a'を指定します

format : 出力の形式と内容を指定します。形式は、上の例に示すように、多くの有用な情報を出力できます。

import logging

logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                datefmt='%a, %d %b %Y %H:%M:%S',
                filename='myapp.log',
                filemode='w')
    
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

 

./myapp.log文件中内容为:
Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

修改输出格式
ログイン後にコピー
ログ形式変数

%(levelno)s: 打印日志级别的数值
 %(levelname)s: 打印日志级别名称
 %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
 %(filename)s: 打印当前执行程序名
 %(funcName)s: 打印日志的当前函数
 %(lineno)d: 打印日志的当前行号
 %(asctime)s: 打印日志的时间
 %(thread)d: 打印线程ID
 %(threadName)s: 打印线程名称
 %(process)d: 打印进程ID
 %(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

日志格式
ログイン後にコピー
ロギングメソッド

logging.StreamHandler: 日志输出到流,可以是sys.stderr、sys.stdout或者文件
logging.FileHandler: 日志输出到文件

日志回滚方式,实际使用时用RotatingFileHandler和TimedRotatingFileHandler
logging.handlers.BaseRotatingHandler
logging.handlers.RotatingFileHandler
logging.handlers.TimedRotatingFileHandler

logging.handlers.SocketHandler: 远程输出日志到TCP/IP sockets
logging.handlers.DatagramHandler:  远程输出日志到UDP sockets
logging.handlers.SMTPHandler:  远程输出日志到邮件地址
logging.handlers.SysLogHandler: 日志输出到syslog
logging.handlers.NTEventLogHandler: 远程输出日志到Windows NT/2000/XP的事件日志
logging.handlers.MemoryHandler: 日志输出到内存中的制定buffer
logging.handlers.HTTPHandler: 通过"GET"或"POST"远程输出到HTTP服务器

logging方法
ログイン後にコピー
StreamHandler と FileHandler は一般的に使用されるログ処理メソッドであるため、 , これらは直接loggingモジュールに含まれていますが、他のメソッドはlogging.handlersモジュールに含まれています

プログラム内でログモジュールを定義

import logging
# create logger
def logger(log_type):
logger = logging.getLogger(log_type) # 创建Logger对象,类型是'TEST-LOG'
logger.setLevel(logging.WARNING) # 设置最低的日志级别,此级别覆盖ch and fh的级别
# 创建输出到控制台处理程序,并设置级别为DEBUG
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG) # 控制输出到屏幕的级别
# 创建输出到文件的处理程序,并设置级别
fh = logging.FileHandler("access.log")
fh.setLevel(logging.WARNING)
# 创建日志格式
formatter_Stream = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
formatter_File = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch and fh
ch.setFormatter(formatter_Stream)
fh.setFormatter(formatter_File)
# add ch and fh to logger
logger.addHandler(ch)
logger.addHandler(fh)
return logger
eee = logger('EEE')
rrr = logger('RRR')
rrr.debug('debug message')
rrr.info('info message')
rrr.warning('warn message')
eee.error('error message')
eee.critical('critical message')

代码
ログイン後にコピー
画面表示内容

RRR - INFO - 情報メッセージ

RRR - WARNING -警告メッセージ

EEE - エラー - エラーメッセージ

EEE - クリティカル - クリティカルメッセージ

ファイルの内容


2017-02-21 21:35:05,700 - RRR - 警告 - 警告メッセージ

2017-02- 21 21:35:05,700 - EEE - ERROR - エラー メッセージ


2017-02-21 21:35:05,700 - EEE - CRITICAL - クリティカル メッセージ


Filter


呼び出し時のパラメータの形式logging.getLogger() は「A.B.C」に似ています。この形式はフィルターを構成するために使用されます。フィルタを追加すると、ログは出力前にフィルタによって処理されます。フィルタ「AAA.BBB」では、名前が「AAA.BBB」で始まるロガーのみが情報を出力できます。フィルターが拒否した場合、ログは出力されません

import logging
def logger(log_type):
logger = logging.getLogger(log_type) # 创建Logger对象,类型是'TEST-LOG'
logger.setLevel(logging.DEBUG) # 此级别覆盖ch and fh的级别
# 创建输出到控制台处理程序,并设置级别为DEBUG
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG) # 控制输出到屏幕的级别
 
# 设置过滤器
filter = logging.Filter('AAA.BBB.CCC')
ch.addFilter(filter)
formatter_Stream = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter_Stream)
logger.addHandler(ch) # ch加入logger
return logger
eee = logger('AAA.BBB.CCC')
rrr = logger('AAA.BBB.DDD')
rrr.error('debug message')
rrr.error('info message')
eee.error('critical message')
eee.error('critical message')

代码
ログイン後にコピー

ログをカット

サイズでカット

import logging
from logging import handlers
# create logger
def logger(log_type):
logger = logging.getLogger(log_type)
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler("access.log")
fh.setLevel(logging.WARNING)
# 按时间切割日志文件
fh = handlers.TimedRotatingFileHandler(filename='access.log', when='s', interval=10 )
formatter_File = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter_File)
logger.addHandler(fh)
return logger
rrr = logger('AAA.BBB.DDD')
rrr.error('debug message')
rrr.error('info message')
rrr.error('warn message')

代码
ログイン後にコピー
interval:時間間隔

when:時間単位S秒M分H時間D日W毎週(間隔==0 時間 月曜日) 毎朝午前 0 時を表します


ルートロガーとロガーの親子関係について

ルートロガーについては、これまで何度も触れてきましたが、実は、ロガー インスタンス間の親子関係。ルート ロガーは最上位のロガーであり、すべてのロガーの祖先です。以下に示すように: ロガー インスタンスを作成せず、logging.debug()、logging.info()、logging.warning()、logging.error()、およびlogging.criticalを直接呼び出す場合、ルート ロガーがデフォルトのロガーになります。 () 関数を使用する場合は、ロガーはルート ロガーであり、自動的に作成でき、単一インスタンスでもあります。


ルート ロガーを取得する方法。logging.getLogger() またはlogging.getLogger("") を通じてルート ロガー インスタンスを取得します。
levelroot ロガーのデフォルトのレベルは、logging です。警告
親子関係を表現する方法。ロガー名の命名方法により、ロガー間の親子関係を示すことができます。例:parent_logger =logging.getLogger('foo)。 ')child_logger =logging.getLogger( 'foo.bar')
有効レベルとは Loggerには有効レベルという概念があります。 ロガーが明示的にレベルを設定しない場合、親のレベルが使用されます。父親がレベルを明示的に設定しない場合は、父親の父親のレベルが使用され、以下同様です...最終的にルート ロガーに到達すると、レベルが設定されているはずです。デフォルトは、logging.WARNING です。子ロガーがメッセージを取得すると、そのメッセージをそのハンドラーに配布して処理するだけでなく、処理のためにすべての祖先ロガーにも渡します

Python ログ モジュールのロギング関連記事については、こちらをご覧ください。 PHP 中国語 Web サイトに注意してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Sublime Code Pythonを実行する方法 Sublime Code Pythonを実行する方法 Apr 16, 2025 am 08:48 AM

PythonコードをSublimeテキストで実行するには、最初にPythonプラグインをインストールし、次に.pyファイルを作成してコードを書き込み、Ctrl Bを押してコードを実行する必要があります。コードを実行すると、出力がコンソールに表示されます。

vscodeでコードを書く場所 vscodeでコードを書く場所 Apr 15, 2025 pm 09:54 PM

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

メモ帳でPythonを実行する方法 メモ帳でPythonを実行する方法 Apr 16, 2025 pm 07:33 PM

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。

See all articles