U
    Aޫ^                     @   s   d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 edd Z
d	d
 Zee
Zeed dd Zdd ZdS )zN
flask.logging
~~~~~~~~~~~~~

:copyright: 2010 Pallets
:license: BSD-3-Clause
    )absolute_importN)
LocalProxy   )requestc                   C   s   t rt jd S tjS )a  Find the most appropriate error stream for the application. If a request
    is active, log to ``wsgi.errors``, otherwise use ``sys.stderr``.

    If you configure your own :class:`logging.StreamHandler`, you may want to
    use this for the stream. If you are using file or dict configuration and
    can't import this directly, you can refer to it as
    ``ext://flask.logging.wsgi_errors_stream``.
    zwsgi.errors)r   environsysstderr r	   r	   1/tmp/pip-unpacked-wheel-xbzl_6n2/flask/logging.pywsgi_errors_stream   s    
r   c                    s@   |    | }|r<t fdd|jD r,dS |js4q<|j}qdS )zCheck if there is a handler in the logging chain that will handle the
    given logger's :meth:`effective level <~logging.Logger.getEffectiveLevel>`.
    c                 3   s   | ]}|j  kV  qd S )Nlevel).0handlerr   r	   r
   	<genexpr>)   s     z$has_level_handler.<locals>.<genexpr>TF)getEffectiveLevelanyhandlers	propagateparent)loggercurrentr	   r   r
   has_level_handler!   s    r   z6[%(asctime)s] %(levelname)s in %(module)s: %(message)sc                 C   s    | j tjkp| jp| jp| j S )zDecide if a logger has direct configuration applied by checking
    its properties against the defaults.

    :param logger: The :class:`~logging.Logger` to inspect.
    )r   loggingNOTSETr   filtersr   )r   r	   r	   r
   _has_config<   s    r   c                 C   sx   t | j}dD ]8}t |}t|rt|stdj| j|d  qJq| jrb|jsb|	t j
 t|st|t |S )a  Get the the Flask apps's logger and configure it if needed.

    The logger name will be the same as
    :attr:`app.import_name <flask.Flask.name>`.

    When :attr:`~flask.Flask.debug` is enabled, set the logger level to
    :data:`logging.DEBUG` if it is not set.

    If there is no handler for the logger's effective level, add a
    :class:`~logging.StreamHandler` for
    :func:`~flask.logging.wsgi_errors_stream` with a basic format.
    )z	flask.appZflaskz'app.logger' is named '{name}' for this application, but configuration was found for '{old_name}', which no longer has an effect. The logging configuration should be moved to '{name}'.)nameold_name)r   	getLoggerr   r   warningswarnformatdebugr   setLevelDEBUGr   
addHandlerdefault_handler)Zappr   r   Z
old_loggerr	   r	   r
   create_loggerJ   s     
 
r(   )__doc__
__future__r   r   r   r    Zwerkzeug.localr   globalsr   r   r   StreamHandlerr'   setFormatter	Formatterr   r(   r	   r	   r	   r
   <module>   s   

