最強の自動テスト - カスタム ログ クラスとログのカプセル化 (実戦)


序文

ログをカスタマイズする前に、次の情報を知っておく必要があります。

ログ コレクター: ログ情報を収集するためのコンテナとして理解できます。
ログ レベル (レベル): DEBUG、INFO、WARNING、ERROR、および CRITICAL
出力チャネル (ハンドル): コンソール出力、StreamHandle は
ログ情報をファイルに保存します: FileHandle

ログ形式 (Format):
通常、ログ時間 - ログ名 - ログ レベル名 - ファイル名 - 行番号 - ログ情報などの情報が含まれます。

例:

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

注:
ロギング モジュールでは、デフォルトはルート ログ コレクターであり、デフォルトの出力レベルは次のとおりです: 警告

カスタムログの運用手順

ログ モジュールをインポートします: importlogging
ログ コレクターを作成します: logger =logging.getLogger("ログ コレクターの名前")
ログ コレクターのログ レベルを設定します: logger.setLevel(logging.INFO) #コレクターから情報へ

ログ コレクターの出力チャネルを作成します (最初の部分の内容に従って、ログ出力チャネルにはコンソール出力とファイル出力が含まれます)。以下では、紹介する例としてコンソール出力を使用します。ファイル出力は同様です。

ロギング用の出力チャネルを作成します: handle1 =logging.StreamHandle()

ログ出力チャネルのレベルは個別に設定できます: handle1.setLevel(logging.ERROR) このステップはオプションです。

注:
ログ出力チャネルのログ レベルが設定されていない場合、ログ コレクターによって設定されたレベルがデフォルトで使用されます。

ログ出力チャネルのログ レベルを個別に設定する必要がある場合、そのログ レベルはログ コレクター レベルよりも高くなければなりません。そうでない場合、設定は無効になります。

ログ出力のコンテンツ形式を設定します。

# 4、设置日志的输出格式
fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
ormatter = logging.Formatter(fmt)

設定されたログ形式を作成された出力チャネルにバインドします。つまり、ログ形式を出力チャネルに関連付けます。

handler1.setFormatter(formatter)

設定した出力チャネルをログコレクターに追加します

logger.addHandler(handler1)

補足:ログ情報をファイルに出力する操作手順は同様ですが、上記とは少し異なります。

handler2 = logging.FileHandler(filename="xxx.log",encoding="utf-8")

コード

import logging

# 1、创建日志收集器
logger = logging.getLogger(name="login_test")

# 2、设置日志收集器的级别:警告级别
logger.setLevel(logging.WARN)

# 3、设置日志的输出渠道
# 3.1 控制台日志输出
handler1 = logging.StreamHandler()
# 3.2 文件日志输出
handler2 = logging.FileHandler(filename="my_log.log",encoding="utf-8")
# 单独设置输出渠道的日志级别
handler1.setLevel(logging.ERROR)    # 可选

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

# 5、关联3和4
handler1.setFormatter(formatter)
handler2.setFormatter(formatter)

# 6、关联1和5
logger.addHandler(handler1)
logger.addHandler(handler2)

# 测试
logger.warning("登录失败警告")
logger.error("登录debug出错")

カスタムログのカプセル化

カスタムログの操作プロセスは比較的固定されているため、カスタムログをクラスにカプセル化できます。使用する必要がある場合は、このモジュールをインポートするだけで済みます。

ソース コードを表示すると、親クラスの debug()、info()、およびその他の関数を継承できるように、カプセル化されたクラスはlogging.Logger クラスを継承する必要があることがわかります。

2 番目の部分の操作プロセスから、このモジュールを導入するときに、異なるユーザーが異なるログ名、ログ レベル、およびログ ファイル情報を設定する可能性があるため、ユーザーはこれらのパラメーターを使用して、ログ オブジェクトをインスタンス化するときにログ オブジェクトを初期化できます。

カスタム ログ クラスを使用する必要がある場合は、このモジュールを導入するだけです。

import logging

# 对日志的操作进行封装
class MyLogger(logging.Logger):

    def __init__(self,name,level,file=None):
        super().__init__(name,level)
        # 设置日志的输出渠道
        handler1 = logging.StreamHandler()
        # 设置日志的输出格式
        fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
        formatter = logging.Formatter(fmt)
        handler1.setFormatter(formatter)
        # 添加日志的输出渠道
        self.addHandler(handler1)

        if file:
            handler2 = logging.FileHandler(filename=file,encoding="utf-8")
            handler2.setFormatter(formatter)
            self.addHandler(handler2)
            pass
        pass
    pass
以下は、私がまとめた 2023 年の最も完全なソフトウェア テスト エンジニア学習知識アーキテクチャ システム図です。

1. Pythonプログラミングの入門から習得まで

画像の説明を追加してください

2.インターフェース自動化プロジェクトの実戦

画像の説明を追加してください

3. Web自動化プロジェクトの実戦

画像の説明を追加してください

4. アプリ自動化プロジェクトの実戦

画像の説明を追加してください

5. 一流メーカーの再開

画像の説明を追加してください

6. DevOps システムのテストと開発

画像の説明を追加してください

7. 一般的に使用される自動テストツール

画像の説明を追加してください

8、JMeterのパフォーマンステスト

画像の説明を追加してください

9. まとめ(最後にちょっとしたサプライズ)

苦労は人生の背景であり、努力は夢を実現するためのステップです。理想の帆を上げて追求の旅に出よう、たとえ困難が多くても、粘り強く前に進んでください、もがいてこそ輝かしい一章を書き上げることができるのです。

夢を持つことは人生の財産であり、努力することが夢を実現する手段です。どんなに挫折や困難に遭遇しても、決して諦めずに勇敢に前進し、闘いだけが心に火を灯し、やがて栄光の向こう側へと導かれます。

困難は人生の試金石であり、闘争は達成への鍵です。自分自身に挑戦し、限界を超え、ハードワークの汗が輝かしい章を紡ぎます。自分の能力を信じ、果敢に前進し、初心を忘れず、努力を続けてください。

おすすめ

転載: blog.csdn.net/shuang_waiwai/article/details/132007318