0-pythonライブラリ-ロギングロギングシステム

一般に、print()を使用して情報を印刷できます。印刷する必要のある情報を階層的に表示し、タイムスタンプを付けてファイルに保存できる場合、printを使用するのは不便です。現在、ロギングライブラリが一般的に使用されています。

1.ログレベルを設定する

まず、次のステートメントをテストします。

import logging  # 引入logging模块

logging.debug(u"debug")
logging.info(u"info")
logging.warning(u"warning")
logging.error(u"error")
logging.critical(u"critical")

結果は次のとおりです。

WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical

したがって、ロギングのデフォルトレベルは警告であり、このレベルより下のレベルは出力されないことがわかります。

ログ出力のレベルを次のように設定する方法

import logging  # 引入logging模块

logging.basicConfig(level=logging.NOTSET)  # 设置日志级别

logging.debug(u"debug")
logging.info(u"info")
logging.warning(u"warning")
logging.error(u"error")
logging.critical(u"critical")

basicConfigのレベルフィールド設定を使用して、次のレベルを設定できます

CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0

2.ログの表示形式を設定する

ログに印刷時間を追加したい場合は、ファイルの行数など、設定方法を印刷します。

import logging

if __name__ == '__main__':
    logging.basicConfig(level=logging.NOTSET,  # 设置日志级别
                        format="%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")

    logging.debug(u"debug")
    logging.info(u"info")
    logging.warning(u"warning")
    logging.error(u"error")
    logging.critical(u"critical")

入力結果に時間があり、コードファイルと行があることがわかります。

2020-02-16 16:16:43,356 - test.py[line:54] - DEBUG: debug
2020-02-16 16:16:43,356 - test.py[line:55] - INFO: info
2020-02-16 16:16:43,356 - test.py[line:56] - WARNING: warning
2020-02-16 16:16:43,356 - test.py[line:57] - ERROR: error
2020-02-16 16:16:43,356 - test.py[line:58] - CRITICAL: critical

3.ログ出力ファイルを設定します

同様に、ファイルにファイルを出力し、filenameパラメータを使用して次のように保存します。

import logging

if __name__ == '__main__':
    logging.basicConfig(level=logging.NOTSET,  # 设置日志级别
                        format="%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s",
                        filename="test.log",  # 指定输出的文件
                        )

    logging.debug(u"debug")
    logging.info(u"info")
    logging.warning(u"warning")
    logging.error(u"error")
    logging.critical(u"critical")

この設定の後、ログの内容をtest.logファイルに保存して送信します。リアルタイムでターミナルに表示する方法はありません。ファイルを開くかどうかはログに依存します。ログファイルが保存されていることを確認できますか、ターミナルもリアルタイムで表示されます。

このとき、ロギングのハンドラインターフェースが使用されます。

4.端末とファイルへの同時出力

ここでは、通常、次のように直接公開することなく、getLoggerインターフェースによってインスタンス化されたロギングを使用します

import logging

logger = logging.getLogger("") # 实例化logging

logger.debug(u"debug")
logger.info(u"info")
logger.warning(u"warning")
logger.error(u"error")
logger.critical(u"critical")

その後、ハンドラーを使用できます。ハンドラーオブジェクトは、適切なログメッセージ(ログメッセージのログレベルに基づく)を、ファイルや標準出力ストリームなどのハンドラーの指定されたターゲットに配信する役割を果たします。

ロギングには多くのハンドルがあります

logging.StreamHandler # 日志输出到流,可以是 sys.stderr,sys.stdout 或者文件。
logging.FileHandler  # 日志输出到文件。
logging.handlers.BaseRotatingHandler  # 基本的日志回滚方式。
logging.handlers.RotatingHandler  # 日志回滚方式,支持日志文件最大数量和日志文件回滚。
logging.handlers.TimeRotatingHandler  # 日志回滚方式,在一定时间区域内回滚日志文件。
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.NullHandler

ここで使用する必要があるのは、StreamHandlerとFileHandlerです。

次の例:

import logging

logger = logging.getLogger("") # 实例化logging

def logging_init():
    # 创建handler
    fh = logging.FileHandler/("test.log", encoding="utf-8")
    ch = logging.StreamHandler()

    # 设置logger日志等级
    logger.setLevel(logging.INFO)

    # 设置输出日志格式
    formatter = logging.Formatter(
        fmt="%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"
    )

    # 为handler指定输出格式,注意大小写
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)

    # 为logger添加的日志处理器
    logger.addHandler(fh)
    logger.addHandler(ch)
    
    return True
    
    
if __name__ == '__main__':
    logging_init()

    logger.debug(u"debug")
    logger.info(u"info")
    logger.warning(u"warning")
    logger.error(u"error")
    logger.critical(u"critical")
    
  • 通常、最初にFileHandler / StreamHandlerなどの必要なハンドルを作成します
  • 次に、setLevel / setFormatterなどのハンドルのプロパティを設定します。
  • 最後にaddHandlerを使用して中央プロセッサに追加します

参考資料:
https : //blog.csdn.net/jeffery0207/article/details/95856490
https://www.cnblogs.com/xianyulouie/p/11041777.html

元の記事を106件公開 賞賛された76件 130,000回の訪問+

おすすめ

転載: blog.csdn.net/Creator_Ly/article/details/104346167