File size: 1,702 Bytes
da8bdb9
 
 
 
 
3a900c7
8ccf878
3a900c7
 
da8bdb9
3a900c7
 
 
afb0c77
3a900c7
da8bdb9
3a900c7
da8bdb9
8ccf878
3a900c7
8ccf878
3a900c7
 
8ccf878
da8bdb9
3a900c7
8ccf878
3a900c7
 
 
 
 
 
 
 
 
 
 
da8bdb9
8ccf878
3a900c7
da8bdb9
8ccf878
da8bdb9
 
 
 
3a900c7
da8bdb9
8ccf878
da8bdb9
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# -*- coding: utf-8 -*-
"""

    Reporter

    ログハンドラーが重複登録されるのを防ぐために1箇所で生成してログハンドラーを返します。

    Example:

        from src.reporter import log



        log.info("message")

        # 2024-05-24T12:34:56+0900#アプリ起動中

"""
import json
from logging import Logger, getLogger
import logging.config

from typing import Optional

from . import PROGRAM_NAME


class Reporter:
    """

    シングルトンパターンを適用したロガークラス。

    このクラスのインスタンスがまだ存在しない場合は新たに作成し、既に存在する場合はそのインスタンスを返します。

    @see https://docs.python.jp/3/howto/logging-cookbook.html

    """
    _instance: Optional[Logger] = None  # Reporterクラスの唯一のインスタンスを保持します。

    def __new__(cls):
        """

        """
        # インスタンスがまだ存在しない場合は新たに作成します。
        if not cls._instance:
            logger = getLogger(PROGRAM_NAME)  # ロガーを取得します。
            with open(r'config.json', 'r', encoding='utf-8') as f:
                config = json.load(f)
            logging.config.dictConfig(config)
            cls._instance = logger  # 作成したロガーを保持します。
        return cls._instance  # 作成したまたは既存のロガーを返します。


log: Logger = Reporter()  # Reporterクラスのインスタンスを取得します。


def main():
    """

        Entry Point

    """
    log.debug("main")


if __name__ == "__main__":
    main()