U
    lHJe                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZmZ G dd dejZG dd dejZed	d
dZee d	ddZdd ZdS )    N)OrderedDict)AnyDictList)defaultssystemutilc                   @   s    e Zd ZdZejdddZdS )RedactionFilterz,A logging filter to redact confidential info)recordc                 C   s   t t|j|_dS )NT)r   Zredact_sensitive_logsstrmsg)selfr
    r   ./usr/lib/python3/dist-packages/uaclient/log.pyfilter   s    zRedactionFilter.filterN)__name__
__module____qualname____doc__logging	LogRecordr   r   r   r   r   r	   
   s   r	   c                   @   s.   e Zd ZdZdZdZdZeje	dddZ
dS )	JsonArrayFormatterzYJson Array Formatter for our logging mechanism
    Custom made for Pro logging needs
    z%Y-%m-%dT%H:%M:%Sz%s.%03d)asctimeZ	levelnamenameZfuncNamelinenomessage)r
   returnc                 C   s   |  |_| ||_i }|jr0| |j|d< |dsJ|jrJ|j|d< |jr`| 	|j|d< |j
d}|rt|tr|| t }| jD ]}|j
|}|||< q||d< tt| S )Nexc_info
stack_infoextra)Z
getMessager   Z
formatTimer   r   ZformatExceptiongetZexc_textr   ZformatStack__dict__
isinstancedictupdater   required_fieldsjsondumpslistvalues)r   r
   Zextra_message_dictr   Zlocal_log_recordZfieldvaluer   r   r   format"   s,    




zJsonArrayFormatter.formatN)r   r   r   r   Zdefault_time_formatZdefault_msec_formatr%   r   r   r   r+   r   r   r   r   r      s
   	r   )r   c                   C   s   t  d S )z/Gets the correct user log_file storage location/ubuntu-pro.log)r   Zget_user_cache_dirr   r   r   r   get_user_log_file@   s    r-   c                  C   sH   t d} g }| D ]0}d| d tj d }t j|r|| q|S )z|Gets all the log files for the users in the system

    Returns a list of all user log files in their home directories.
    z/homez/home/z/.cache/r,   )oslistdirr   ZUSER_CACHE_SUBDIRpathisfileappend)Zuser_directoriesZ	log_filesZuser_directoryZ	user_pathr   r   r   get_all_user_log_filesE   s     
r3   c                 C   sB   | |  |t  t }|t  | |  || d S )N)ZsetLevelZ	addFilterr	   r   ZStreamHandlerZsetFormatterr   Z
addHandler)Z	log_levelZloggerZconsole_handlerr   r   r   setup_journald_loggingY   s    

r4   )r&   r   r.   collectionsr   typingr   r   r   Zuaclientr   r   r   ZFilterr	   Z	Formatterr   r   r-   r3   r4   r   r   r   r   <module>   s   .