§
    ¹¦j  ã                   ó¦   — d Z ddlZddlZddlZddlmZ dZdZdej        fde	de
d	ej        fd
„Zdej        fdej        de	dee         de
d	df
d„ZdS )uU  ThÆ° viá»‡n dÃ¹ng chung ghi log chuáº©n hÃ³a cho toÃ n bá»™ há»‡ thá»‘ng AutoPOE2.

Module nÃ y cung cáº¥p cáº¥u hÃ¬nh logger phÃ¢n cáº¥p chuáº©n, Ä‘á»‹nh dáº¡ng Ä‘á»“ng nháº¥t
vÃ  cÃ¡c hÃ m tiá»‡n Ã­ch ghi nháº­n ngoáº¡i lá»‡ khÃ´ng nuá»‘t lá»—i, tuÃ¢n thá»§ nghiÃªm ngáº·t
quy táº¯c chá»‘ng nuá»‘t lá»—i (Anti-Symptom Patching & Rule 16).
é    N)ÚOptionalzA[%(asctime)s.%(msecs)03d] [%(levelname)s] [%(name)s]: %(message)sz%Y-%m-%d %H:%M:%SÚAutoPOE2ÚnameÚlevelÚreturnc                 ó`  — t          j        | ¦  «        }|                     |¦  «         |j        s}t          j        t
          j        ¦  «        }|                     |¦  «         t          j        t          t          ¬¦  «        }| 
                    |¦  «         |                     |¦  «         |S )uÐ  Khá»Ÿi táº¡o hoáº·c trÃ­ch xuáº¥t Logger phÃ¢n cáº¥p chuáº©n cho module chá»‰ Ä‘á»‹nh.

    Tá»± Ä‘á»™ng cáº¥u hÃ¬nh StreamHandler xuáº¥t ra stdout vá»›i Ä‘á»‹nh dáº¡ng chuáº©n má»±c náº¿u
    logger chÆ°a cÃ³ handler nÃ o Ä‘Æ°á»£c Ä‘Äƒng kÃ½. TrÃ¡nh trÃ¹ng láº·p handler khi gá»�i nhiá»�u láº§n.

    Args:
        name: TÃªn cá»§a logger (thÆ°á»�ng lÃ  __name__ hoáº·c tÃªn module nghiá»‡p vá»¥).
        level: Cáº¥p Ä‘á»™ ghi nháº­n nháº­t kÃ½ (máº·c Ä‘á»‹nh logging.INFO).

    Returns:
        logging.Logger: Ä�á»‘i tÆ°á»£ng logger Ä‘Ã£ Ä‘Æ°á»£c cáº¥u hÃ¬nh chuáº©n.

    Example:
        >>> logger = get_logger("VisualWatcher")
        >>> logger.info("Khá»Ÿi Ä‘á»™ng há»‡ thá»‘ng quan sÃ¡t thÃ nh cÃ´ng.")
    )ÚfmtÚdatefmt)ÚloggingÚ	getLoggerÚsetLevelÚhandlersÚStreamHandlerÚsysÚstdoutÚ	FormatterÚDEFAULT_LOG_FORMATÚDEFAULT_DATE_FORMATÚsetFormatterÚ
addHandler)r   r   ÚloggerÚhandlerÚ	formatters        ú/C:\Projects\AutoPOE2\src\common\logging_util.pyÚ
get_loggerr      sš   € õ" Ô˜tÑ$Ô$€FØ
‡O‚O�EÑÔÐàŒ?ð #ÝÔ'­¬
Ñ3Ô3ˆØ×Ò˜ÑÔÐÝÔ%Õ*<ÕFYÐZÑZÔZˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×Ò˜'Ñ"Ô"Ð"à€Mó    r   ÚcontextÚexcc                 óV  — |€t          j        ¦   «         \  }}}|}|�qd                     t          j        t          |¦  «        ||j        ¦  «        ¦  «        }|                      |d|› dt          |¦  «        j        › d|› d|› �¦  «         dS |                      |d|› d�¦  «         dS )uÁ  Ghi nháº­n chi tiáº¿t ngoáº¡i lá»‡ kÃ¨m ngá»¯ cáº£nh vÃ  traceback Ä‘áº§y Ä‘á»§.

    HÃ m nÃ y Ä‘Æ°á»£c thiáº¿t káº¿ Ä‘á»ƒ triá»‡t tiÃªu hoÃ n toÃ n cÃ¡c khá»‘i 'except: pass' vÃ´ trÃ¡ch nhiá»‡m,
    Ä‘áº£m báº£o má»�i ngoáº¡i lá»‡ trong runtime Ä‘á»�u Ä‘Æ°á»£c lÆ°u váº¿t chi tiáº¿t phá»¥c vá»¥ Ä‘iá»�u tra nguyÃªn
    nhÃ¢n gá»‘c rá»… (Root Cause Analysis - Rule 8).

    Args:
        logger: Logger dÃ¹ng Ä‘á»ƒ ghi nháº­n ngoáº¡i lá»‡.
        context: Chuá»—i mÃ´ táº£ ngá»¯ cáº£nh xáº£y ra lá»—i (vÃ­ dá»¥: "Ä�á»�c cáº¥u hÃ¬nh visual_tool tháº¥t báº¡i").
        exc: Ä�á»‘i tÆ°á»£ng ngoáº¡i lá»‡ (náº¿u None, tá»± Ä‘á»™ng trÃ­ch xuáº¥t tá»« sys.exc_info()).
        level: Cáº¥p Ä‘á»™ log dÃ¹ng Ä‘á»ƒ ghi nháº­n (máº·c Ä‘á»‹nh logging.ERROR).

    Returns:
        None.

    Example:
        >>> try:
        ...     risky_operation()
        ... except Exception as e:
        ...     log_exception(logger, "Thá»±c thi tÃ¡c vá»¥ máº¡o hiá»ƒm", e)
    NÚ z[EXCEPTION] z - z: ú
u6    - KhÃ´ng trÃ­ch xuáº¥t Ä‘Æ°á»£c thÃ´ng tin traceback.)	r   Úexc_infoÚjoinÚ	tracebackÚformat_exceptionÚtypeÚ__traceback__ÚlogÚ__name__)r   r   r   r   Úexc_typeÚexc_valÚexc_tbÚtb_strs           r   Úlog_exceptionr.   0   s¹   € ð6 €{Ý$'¤L¡N¤NÑ!ˆ�'˜6Øˆà
€Ø—’�Ô3µD¸±I´I¸sÀCÔDUÑVÔVÑWÔWˆØ�
Š
�5ÐZ¨ÐZÐZµT¸#±Y´YÔ5GÐZÐZÈ3ÐZÐZÐRXÐZÐZÑ[Ô[Ð[Ð[Ð[à�
Š
�5Ðh¨ÐhÐhÐhÑiÔiÐiÐiÐir   )Ú__doc__r   r   r$   Útypingr   r   r   ÚINFOÚstrÚintÚLoggerr   ÚERRORÚBaseExceptionr.   © r   r   ú<module>r8      sø   ððð ð €€€Ø 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð ð YÐ Ø)Ð ð &°G´Lð ð �Sð ¨cð ÀWÄ^ð ð ð ð ðB $(Ø”ð	#jð #jØŒNð#jàð#jð 
�-Ô	 ð#jð ð	#jð
 
ð#jð #jð #jð #jð #jð #jr   