import logging #初始化logger 对象 logger = logging.getLogger("main") #设置logger对象基础级别,后面的handle的级别是基于此级别上的:及若是基础级别为 warning,则后面的handle最小级别就是handle了;若是基础是info,后面handle的级别是warning,则是warning logger.setLevel(logging.WARNING) # 创建一个filehandler来把日志记录在文件里,级别为debug以上 filehandle = logging.FileHandler("test.log") filehandle.setLevel(logging.DEBUG) # 创建一个streamhandler来把日志打在CMD窗口上,级别为info以上 consolehandle = logging.StreamHandler() consolehandle.setLevel(logging.INFO) # 分别为两个handle设置日志格式 formatter = logging.Formatter("%(asctime)s - %(name)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s") filehandle.setFormatter(formatter) consolehandle.setFormatter(formatter) #将两个handler添加在logger对象中 logger.addHandler(consolehandle) logger.addHandler(filehandle) # 开始打日志 logger.debug("debug message") logger.info("info message") logger.warn("warn message") logger.error("error message") logger.critical("critical message")
1. logger:提供日志接口,供应用代码使用。logger最长用的操做有两类:配置和发送日志消息。能够经过logging.getLogger(name)获取logger对象,若是不指定name则返回root对象,屡次使用相同的name调用getLogger方法返回同一个logger对象。socket
2. handler:将日志记录(log record)发送到合适的目的地(destination),好比文件,socket等。一个logger对象能够经过addHandler方法添加0到多个handler,每一个handler又能够定义不一样日志级别,以实现日志分级过滤显示。函数
3. filter:提供一种优雅的方式决定一个日志记录是否发送到handler。this
4. formatter:指定日志记录输出的具体格式。formatter的构造方法须要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。spa
class Logger(object): def __init__(self,loggerName,fileLog): basic_level = logging.DEBUG console_level = logging.INFO file_level = logging.INFO formatter = logging.Formatter("%(asctime)s - %(name)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s") self.logger = logging.getLogger(loggerName) self.logger.setLevel(basic_level) file_handle = logging.FileHandler(fileLog) file_handle.setLevel(file_level) file_handle.setFormatter(formatter) console_handle = logging.StreamHandler() console_handle.setLevel(console_level) console_handle.setFormatter(formatter) self.logger.addHandler(file_handle) self.logger.addHandler(console_handle) def debug(self, message): self.logger.debug(message) def info(self, message): self.logger.info(message) def warn(self, message): self.logger.warn(message) def error(self, message): self.logger.error(message) def critical(self, message): self.logger.critical(message) if __name__ == '__main__': import datetime dt = datetime.datetime.now() logfilename = "../logs/test_%s.log" % dt.strftime('%Y%m%d') logger = Logger("Python.utils.Log",logfilename) logger.debug("this is a test for debug") logger.info("this is a test for info") logger.warn("this is a test for warn") logger.error("this is a test for error")