
    \^i
                    F    d Z ddlmZ ddlZddlZddlZdddd
ZdddZdS )u  Structured logging configuration using *structlog*.

Usage::

    from app.utils.logger import get_logger

    logger = get_logger(__name__)
    logger.info("event_happened", user_id="abc", count=42)

结构化日志配置模块。
基于 structlog 提供统一的日志初始化和 logger 获取接口。
开发环境使用彩色控制台输出，生产环境输出 JSON Lines 格式（适配 ELK）。
支持 contextvars 自动注入 trace_id / doc_id 等链路上下文。
    )annotationsNF)debugr   boolreturnNonec                t   | rt           j        nt           j        }t          j        j        t          j        j        t          j        j        t          j	        
                    d          t          j	                                        t          j	                                        g}| rt          j                                        }n t          j	                            d          }t          j        g |t          j        j        j        t          j                                        t          j        j        d           t          j                            t          j        j        j        |g|          }t          j        t.          j                  }|                    |           t          j                    }|j                                         |                    |           |                    |           dD ]3}t          j        |                              t           j                   4d	S )
u  Configure structlog and the stdlib root logger.

    Call once during application startup (e.g. in the lifespan handler).

    初始化日志系统，应在应用启动时调用一次。
    debug=True 时使用彩色控制台渲染器，否则使用 JSON 渲染器。
    iso)fmtF)ensure_asciiT)
processorslogger_factorywrapper_classcache_logger_on_first_use)r   foreign_pre_chain)elasticsearchneo4jhttpxhttpcorezuvicorn.accessN) loggingDEBUGINFO	structlogcontextvarsmerge_contextvarsstdlibadd_log_leveladd_logger_namer   TimeStamperStackInfoRendererUnicodeDecoderdevConsoleRendererJSONRenderer	configureProcessorFormatterwrap_for_formatterLoggerFactoryBoundLoggerremove_processors_metaStreamHandlersysstdoutsetFormatter	getLoggerhandlersclear
addHandlersetLevelWARNING)r   	log_levelshared_processorsrenderer	formatterhandlerroot_loggernames           *D:\work\zm-rag\backend\app\utils\logger.pyconfigure_loggingr<      s    "'8GLI 	/&(((U(33..00++--:  I.7m.K.K.M.M '44%4HH

/B
 !'5577&2"&     33/F
 , 4  I #CJ//G####%%K   7###### R : :$((9999: :    r:   
str | Nonestructlog.stdlib.BoundLoggerc                *    t          j        |           S )z Return a bound structlog logger.)r   
get_logger)r:   s    r;   rA   rA   R   s    %%%r=   )r   r   r   r   )N)r:   r>   r   r?   )__doc__
__future__r   r   r+   r   r<   rA    r=   r;   <module>rE      s     # " " " " "  



     (- 7: 7: 7: 7: 7: 7:t& & & & & & &r=   