2828from datetime import datetime , timedelta
2929import pathlib
3030import os
31- from functools import singledispatch
32-
33- __VERSION__ = (1 , 0 , 2 )
34-
35- DEBUG = logging .DEBUG
36- INFO = logging .INFO
37- WARNING = logging .WARNING
38- ERROR = logging .ERROR
39- CRITICAL = logging .CRITICAL
40-
41- _log_level_name = {
42- 'DEBUG' : DEBUG ,
43- "INFO" : INFO ,
44- "WARNING" : WARNING ,
45- "ERROR" : ERROR ,
46- "CRITICAL" : CRITICAL
47- }
4831
49- _supported_log_levels = [DEBUG , INFO , WARNING , ERROR , CRITICAL ]
32+ __VERSION__ = (1 , 0 , 7 )
33+
34+ DEFAULT_LEVEL = logging .WARNING
35+
36+ DEBUG = 'DEBUG'
37+ INFO = 'INFO'
38+ WARNING = 'WARNING'
39+ ERROR = 'ERROR'
40+ CRITICAL = 'CRITICAL'
41+
42+ _log_level_number = {
43+ 'DEBUG' : logging .DEBUG ,
44+ "INFO" : logging .INFO ,
45+ "WARNING" : logging .WARNING ,
46+ "ERROR" : logging .ERROR ,
47+ "CRITICAL" : logging .CRITICAL
48+ }
5049
5150
5251def create_logger (console_level = WARNING , log_file = '' , file_level = WARNING , name = '' , file_mode = 'a' , console = True ,
53- syslog = False , syslog_script_name = '' , log_file_vars = [] , log_file_retention_days = 0 , propagate = False ):
52+ syslog = False , syslog_script_name = '' , log_file_vars = None , log_file_retention_days = 0 , propagate = False ):
5453 """ Creates a logger and returns the handle.
55- Log file vars should be sent as a dict -> {"var": "{date}", "set": "%Y-%m-%d-%Y-%M"}
54+ Log file vars should be sent as a list of dict -> [ {"var": "{date}", "set": "%Y-%m-%d-%Y-%M"}]
5655
5756 Supported log file vars:
5857 {date} - will be replaced with the current date using the provided strftime format
@@ -67,35 +66,37 @@ def create_logger(console_level=WARNING, log_file='', file_level=WARNING, name='
6766 # Console
6867 if console :
6968 console_handler = logging .StreamHandler ()
70- console_handler .setLevel (_log_level_name . get ( console_level . upper (), logging . INFO ) if not isinstance (console_level , int ) else console_level )
69+ console_handler .setLevel (console_level if isinstance (console_level , int ) else _log_level_number . get ( str ( console_level ). upper (), DEFAULT_LEVEL ) )
7170 console_handler .setFormatter (formatter )
7271 logger .addHandler (console_handler )
7372
7473 # syslog
7574 if syslog :
7675 syslog_formatter = logging .Formatter (syslog_script_name + '[%(process)d]: %(levelname)s: %(message)s' )
7776 syslog_handler = logging .handlers .SysLogHandler (address = '/dev/log' )
78- syslog_handler .setLevel (_log_level_name . get ( file_level . upper (), logging . WARNING ) if not isinstance (file_level , int ) else file_level )
77+ syslog_handler .setLevel (file_level if isinstance (file_level , int ) else _log_level_number . get ( str ( file_level ). upper (), DEFAULT_LEVEL ) )
7978 syslog_handler .setFormatter (syslog_formatter )
8079 logger .addHandler (syslog_handler )
8180
8281 # file
8382 if log_file != '' :
8483 # replace variables in the log file name
85- for var in log_file_vars :
86- if type (var ) == dict and 'var' in var and 'set' in var and var ['var' ] == "{date}" :
87- log_file = log_file .replace (var ['var' ], datetime .now ().strftime (var ['set' ]))
84+ if log_file_vars is not None :
85+ for var in log_file_vars :
86+ if isinstance (var , dict ) and 'var' in var and 'set' in var and var ['var' ] == "{date}" :
87+ log_file = log_file .replace (var ['var' ], datetime .now ().strftime (var ['set' ]))
8888 file_handler = logging .FileHandler (log_file , mode = file_mode , encoding = 'utf-8' , delay = False )
89- file_handler .setLevel (_log_level_name . get ( file_level . upper (), logging . WARNING ) if not isinstance (file_level , int ) else file_level )
89+ file_handler .setLevel (file_level if isinstance (file_level , int ) else _log_level_number . get ( str ( file_level ). upper (), DEFAULT_LEVEL ) )
9090 file_handler .setFormatter (formatter )
9191 logger .addHandler (file_handler )
9292
9393 # manage retention
9494 if log_file_retention_days > 0 :
9595 # replace variables with a *
9696 log_file_search_name = log_file
97- for var in log_file_vars :
98- log_file_search_name .replace (var ['var' ], '*' )
97+ if log_file_vars is not None :
98+ for var in log_file_vars :
99+ log_file_search_name .replace (var ['var' ], '*' )
99100 old_log_files = glob (log_file_search_name )
100101 for old_log_file in old_log_files :
101102 # check the age and delete if needed
@@ -106,4 +107,4 @@ def create_logger(console_level=WARNING, log_file='', file_level=WARNING, name='
106107 os .remove (old_log_file )
107108
108109 # return the logger
109- return logger
110+ return logger
0 commit comments