Home > Article > Backend Development > Python module: logging
Many programs have the need to record logs, and the information contained in the logs includes normal program access logs, and may also include errors, warnings and other information output. Python's logging module provides a standard log interface through which you can store Various formats of logs. The recorded logs can be divided into 5 levels: debug, info, warning, error, and critical. Let’s take a look at how to use it.
First introduction to the module:
#logging初识 import logging logging.warning("user [James] attempted wrong password more than 3 times") logging.critical("server is down") # WARNING:root:user [James] attempted wrong password more than 3 times # CRITICAL:root:server is down
The above code is the simplest way, brackets The content inside is the printed information, and the method after logging. is the log level. Let’s take a look at the detailed information of the five levels of logging. If you want to write the log to a file, it is also very simple:
#日志打印到文件中 import logging logging.basicConfig(filename="example.log",level=logging.INFO, format="%(asctime)s %(message)s", datefmt="%m/%d/%Y %H:%M:%S [%A]") # H 24小时格式 I 12小时格式 A 周几完整 a 周几简写 p AM/PM logging.debug("This message should go to the log file") logging.info("So should this") logging.warning("And this ,too")
logging .basicConfig defines the input file path, input log information level, input format, and the format can be customized; after executing the code, the example.log file will generate the following information:
10/31/2016 17:16:17 [Monday] So should this 10/31/2016 17:16:17 [Monday] And this ,tooAmong them, level=loggin in the following sentence. INFO means to set the logging level to INFO, that is to say, only logs with INFO or higher level than INFO will be recorded to the file. In this example, the first log will not be recorded. Yes, if you want to record debug logs, just change the log level to DEBUG. If you want to print the log on the screen and in the file log at the same time, you need to know some complicated knowledge: The logging library takes a modular approach and offers several categories of components: loggers, handlers, filters, and formatters.Loggers expose the interface that application code directly uses.Handlers send the log records (created by loggers) to the appropriate destination. Filters provide a finer grained facility for determining which log records to output.Formatters specify the layout of log records in the final output.
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian import logging #创建logger logger = logging.getLogger("test_log") #创建logger对象 括号内容随便写 logger.setLevel(logging.INFO) #全局日志级别 ch = logging.StreamHandler() #日志打印到屏幕上 ch.setLevel(logging.DEBUG) #指定ch日志打印级别 fh = logging.FileHandler("access.log") #日志存进文件 fh.setLevel(logging.WARNING) #指定fh日志输入级别 formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") #定义日志格式,可写多个 #添加日志格式到ch,fh ch.setFormatter(formatter) fh.setFormatter(formatter) #添加ch,fh到logger中 logger.addHandler(ch) logger.addHandler(fh) logger.debug('debug message') logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message')The global log level is the bottom line of the entire program. If you want to print, the local log level cannot be higher than this The level couldn’t be lower Screen printing information
2016-10-31 17:23:42,988 - test_log - INFO - info message 2016-10-31 17:23:42,988 - test_log - WARNING - warn message 2016-10-31 17:23:42,988 - test_log - ERROR - error message 2016-10-31 17:23:42,988 - test_log - CRITICAL - critical messageaccess.log:
2016-10-31 17:02:06,223 - test_log - WARNING - warn message 2016-10-31 17:02:06,224 - test_log - ERROR - error message 2016-10-31 17:02:06,224 - test_log - CRITICAL - critical messageAll log formats:
Several important formats: %(lineno)d Output print log code line, %(process) d outputs the process ID of the printing log, %(thread)d outputs the thread ID of the printing log