~e TddlZddlZddlZdZGddeZd dZd dZd dZ dZ y) Nz;%(asctime)s %(levelname)-8s [%(threadName)-10s] %(message)sc eZdZy)LoggingAttributeErrorN)__name__ __module__ __qualname__7/usr/lib/python3/dist-packages/landscape/lib/logging.pyrrsr rc|jdddddd}|r |d|d z }|jd d d || |jd|dy)z?Add common logging-related CLI options to the given arg parser.z-qz--quietF store_truez"Do not log to the standard output.)defaultactionhelpz)The directory in which to write log filesz (default: z).z-lz --log-dirFILE)metavarr rz --log-levelz/One of debug, info, warning, error or critical.)r rN) add_option)parserlevellogdir logdirhelps r add_cli_optionsr s   1 =J  F:R00       >r c |0tjjtjd}t j |j}t|tr_tt j|||t jt|stjndt jStt jt j||t jt|stjndd|d|}t j |t#|)z3Given a log dir, set up logging for an application.NrzUnknown level z!, conversion to logging code was )ospathbasenamesysargvlogging getLevelNameupper isinstanceint _init_logging getLogger FormatterFORMATstdoutINFOerrorr)rrprognamequiet levelcodemsgs r init_app_loggingr.(s77##CHHQK0$$U[[]3I)S!          f %#CJJ    ""     LL     f %#CJJ  UI& )} .   c#C((r c|j|tjj|stj|tjj ||dz}t j|g}|r$|jt j||D]$}|j||j|&y)Nz.log) setLevelrrexistsmakedirsjoinr FileHandlerappend StreamHandler addHandler setFormatter) loggerrrlogname formatterr'filenamehandlershandlers r r#r#Hs OOE 77>>& ! Fww||FGf$45H H%H--f56('"Y'(r ctjjD]}}t|tjs|j  |j jt|j|j|_|jtjdy#|jwxYw)z This closes and reopens the underlying files in the logging module's root logger. If called after logrotate (or something similar) has moved the old log file out of the way, this will start writing to a new new log file... zLandscape Logs rotatedN) rr$r=r!r4acquirestreamcloseopen baseFilenamemodereleaseinfo)r>s r rotate_logsrH\s$$&//" gw22 3 OO  "$$&!%g&:&:GLL!I!" LL)*!s ?B55C)rGN)rGNF)N) ros.pathrrr& Exceptionrrr.r#rHrr r rKs4 F I 8)@((+r