Python3的logging模块是Python内置的日志记录工具,它提供了灵活的日志记录功能,包括不同级别的日志(如DEBUG、INFO、WARNING、ERROR、CRITICAL)以及将日志记录到文件或控制台的能力。在大型项目中,日志管理是非常重要的,它可以帮助开发者追踪程序的运行状态,调试错误,以及在生产环境中监控程序行为。
在这个日志封装实例中,作者使用了一个名为`Singleton`的设计模式来确保日志类只有一个实例,这样可以避免在整个程序中创建多个日志实例导致的日志混乱。`Singleton`模式是一种软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。
封装的`Logger`类接收以下几个参数:
1. `set_level`:设置日志级别,默认为"INFO"。可以接受的日志级别有"NOTSET"、"DEBUG"、"INFO"、"WARNING"、"ERROR"和"CRITICAL"。
2. `name`:日志中显示的名称,默认为运行程序的名称。
3. `log_name`:日志文件名,默认为当前日期(例如:2018-10-12.log)。
4. `log_path`:日志文件保存的路径,默认为`logger.py`同级目录下的"log"文件夹。
5. `use_console`:布尔值,表示是否在控制台打印日志,默认为True。
在`Logger`类的初始化方法中,首先检查`set_level`是否为空,如果为空,则根据运行环境自动设置为"DEBUG"(在IPython环境中)或"INFO"。接着,创建日志目录如果不存在,并设置日志格式。然后,添加文件处理器(`FileHandler`)用于将日志写入文件,以及控制台处理器(`StreamHandler`)用于在终端输出日志,每个处理器都使用自定义的格式化器。
`__getattr__`方法用于在调用未定义的方法时,转而调用`self.logger`对象的相应方法,这样可以方便地通过`logger.info()`、`logger.debug()`等直接调用日志级别方法。
`logger`属性通过`@property`和`@logger.setter`装饰器实现,允许外部对`self.__logger`进行读取和设置。
`_exec_type`是一个私有方法,用于判断运行环境,如果环境变量`IPYTHONENABLE`存在,返回"DEBUG",否则返回"INFO"。这有助于在开发环境中启用更详细的日志记录。
这个封装实例提供了基本的日志记录需求,但如果需要更复杂的日志管理,如日志滚动、多进程/线程日志同步、异步日志处理等,可能需要进一步扩展或使用第三方库如`logging.handlers`模块中的`RotatingFileHandler`或`TimedRotatingFileHandler`,或者使用`loguru`等更高级的日志库。