Preface
Encountered this code
# LOGGING_NAMESPACE = 'diora'
# Create logger.
logger = logging.getLogger(LOGGING_NAMESPACE)
# NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
logger.setLevel(logging.INFO)
# Create file handler. # 文件日志
fh = logging.FileHandler(log_file)
fh.setLevel(logging.INFO)
# Also log to console. # 控制台日志
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# create formatter and add it to the handlers
# %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”
# %(levelname)s 文本形式的日志级别
# %(message)s 用户输出的消息
formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)
# HACK: Weird fix that counteracts other libraries (i.e. allennlp) modifying
# the global logger.
if len(logger.parent.handlers) > 0:
logger.parent.handlers.pop()
logger should be a global variable
to sum up
The easiest way to create a logger is the following four steps:
- logger = logging.getLogger(projectname);logger.setLevel()
- file_handler = logging.FileHandler(logfile);file_handler.setLevel()
- console_handler = logging.StreamHandler();console_handler.setLevel()
- formatter = logging.Formatter(’%(asctime)s [%(levelname)s] %(message)s’)
- file_handler.setFormatter();console_handler.setFormatter()
- logger.addHandler(fh);logger.addHandler(ch)