logging 日志两种使用方法(转)
下面我们使用代码logging的代码来说明:
使用baseConfig()函数对 logging进行 简单的 配置:
- import logging;
- # 使用baseConfig()函数,可选参数有filename,filemode,format,datefmt,level,stream
- # 有filename是文件日志输出,filemode是'w'的话,文件会被覆盖之前生成的文件会被覆盖。datafmt参数用于格式化日期的输出
- logging.basicConfig(filename="config.log",filemode="w",format="%(asctime)s-%(name)s-%(levelname)s-%(message)s",level=logging.INFO);
- # 使用logging输出日志信息
- logging.debug("debug");
- logging.info("info");
- logging.warning("warning");
- logging.error("error");
- logging.critical("critiacl");
通过初始化logger,handler,formater来配置logging:
- import logging;
- # logging模块由logger,handler,filter,fomatter四个部分组成
- # 获取一个logger对象
- logger = logging.getLogger("haha");
- # 设置日志输出等级
- logger.setLevel(logging.DEBUG);
- # 创建一个文件的handler
- f_handler = logging.FileHandler("xxx.log");
- f_handler.setLevel(logging.INFO);
- # 创建一个控制台的handler
- c_handler = logging.StreamHandler();
- c_handler.setLevel(logging.WARNING);
- # 设置日志的输出格式
- fmt = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s");
- # 给handler绑定一个fomatter类
- f_handler.setFormatter(fmt);
- c_handler.setFormatter(fmt);
- # 绑定一个handler
- logger.addHandler(f_handler);
- logger.addHandler(c_handler);
- # 使用logger输出日志信息
- logger.debug("debug");
- logger.info("info");
- logger.warning("warning");
- logger.error("error");
- logger.critical("critiacl");
使用配置文件实现logging的配置:
- import logging
- import logging.config
- # 使用配置文件配置logging
- logging.config.fileConfig("config.conf");
- logger = logging.getLogger("simpleExample");
- # 使用logger
- logger.debug("debug");
- logger.info("info");
- logger.warning("warning");
- logger.error("error");
- logger.critical("critiacl");
与之对应的配置文件内容如下:
- [loggers]
- keys=root,simpleExample
- [handlers]
- keys=consoleHandler,fileHandler
- [formatters]
- keys=simpleFormatter
- [logger_root]
- level=DEBUG
- handlers=consoleHandler
- [logger_simpleExample]
- level=DEBUG
- handlers=consoleHandler,fileHandler
- qualname=simpleExample
- propagate=0
- [handler_consoleHandler]
- class=StreamHandler
- level=DEBUG
- formatter=simpleFormatter
- args=(sys.stdout,)
- [handler_fileHandler]
- class=FileHandler
- level=WARNING
- formatter=simpleFormatter
- args=("file_config_log.log", "a")
- [formatter_simpleFormatter]
- format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
- datefmt=
上面的配置文件中:由[loggers],[handlers],[formaters] 信息,keys对应实例化是他们的名称,多个用逗号隔开。然后再分别配置各个logger,handler,formaters。以logger为例,logger下有root和simpleExample两个logger,就要配置[logger_root]和[logger_simpleExample];类似的,handler和formater也是这样。
在[logger_name] 中的参数purlname ,是设置logging.getLoger(name)中的name值;propagete参数 :propagete=0,表示输出日志,但消息不传递;propagate=1是输出日志,同时消息往更高级别的地方传递。若上面配置文件参数progagate=1,simpleExample的更高级logger有root,输出的结果会是:
- 2012-08-06 23:07:18,483 - simpleExample - DEBUG - debug
- 2012-08-06 23:07:18,483 - simpleExample - DEBUG - debug
- 2012-08-06 23:07:18,483 - simpleExample - INFO - info
- 2012-08-06 23:07:18,483 - simpleExample - INFO - info
- 2012-08-06 23:07:18,483 - simpleExample - WARNING - warning
- 2012-08-06 23:07:18,483 - simpleExample - WARNING - warning
- 2012-08-06 23:07:18,483 - simpleExample - ERROR - error
- 2012-08-06 23:07:18,483 - simpleExample - ERROR - error
- 2012-08-06 23:07:18,483 - simpleExample - CRITICAL - critiacl
- 2012-08-06 23:07:18,483 - simpleExample - CRITICAL - critiacl
最后是 [hander_name] 配置下的args参数,其实就是你使用的handler类型的初始化函数的参数