
    P~j                       d Z ddlmZ ddlZddlZddlZ ej        dej                   ej        dej                   ej        dej                   ej        dej                   ej        dej                   ej        d	ej                   ej        d
ej                   ej        dej                   ej        dej                   ej        dej                  g
ZddZ	 G d dej
                  ZddZddZdS )zLogging with secret redaction.

Mirrors community-system/app/core/logging.py. Patterns scrub credentials out
of any log line before the handler sees it. Keep these patterns in sync with
the SECRET_ENV_NAMES listed in app/config.py.
    )annotationsNz(access_token=)[^&\s]+z(token=)[^&\s]+z(key=)[^&\s]+z(api[_-]?key=)[^&\s]+z#(Authorization:?\s*)(Bearer\s+)?\S+z(x-api-key:?\s*)\S+z"token"\s*:\s*"[^"]+"z"access_token"\s*:\s*"[^"]+"z"api_key"\s*:\s*"[^"]+"z'(postgresql(?:\+\w+)?://[^:]+:)[^@]+(@)valuestrreturnc                L    | }t           D ]}|                    d |          }|S )Nc                H   | j         r8| j         dk    r-|                     d          r|                     d           dnc|                     d          d t          |                     d                     t          |                     d                    z             dS )N      z
[REDACTED]r   )	lastindexgrouplen)ms    d/Users/abstractioneditor2/ai-workstation/projects/automation/show-city-briefing-agent/app/logging.py<lambda>z redact_secrets.<locals>.<lambda>&   s    ;T#$;!#3#3

#3 771::))))

#FS__$4s1771::$F#FGSSS     )_SECRET_PATTERNSsub)r   redactedpatterns      r   redact_secretsr   "   sA    H# 
 
;; 
 
 
 Or   c                        e Zd Zd fdZ xZS )SecretRedactingFormatterrecordlogging.LogRecordr   r   c                `    t          t                                          |                    S N)r   superformat)selfr   	__class__s     r   r   zSecretRedactingFormatter.format1   s!    eggnnV44555r   )r   r   r   r   )__name__
__module____qualname__r   __classcell__)r    s   @r   r   r   0   s=        6 6 6 6 6 6 6 6 6 6r   r   Nonec                 F   t          j        t          j                  } |                     t          d                     t          j                    }|                    t           j                   |j	        
                                 |                    |            d S )Nz1%(asctime)s [%(levelname)s] %(name)s: %(message)s)loggingStreamHandlersysstdoutsetFormatterr   	getLoggersetLevelINFOhandlersclear
addHandler)handlerroots     r   setup_loggingr4   5   s    #CJ//G ?	
 	
  
 DMM',MOOGr   namelogging.Loggerc                *    t          j        |           S r   )r'   r,   )r5   s    r   
get_loggerr8   B   s    T"""r   )r   r   r   r   )r   r%   )r5   r   r   r6   )__doc__
__future__r   r'   rer)   compile
IGNORECASEr   r   	Formatterr   r4   r8    r   r   <module>r@      s    # " " " " "  				 




 BJ("-88BJ!2=11BJ//BJ'77BJ5r}EEBJ%r}55BJ'77BJ.>>BJ)2=99BJ92=II &   6 6 6 6 6w0 6 6 6

 
 
 
# # # # # #r   