模块简介
安装模块
代码封装
目前仅封装了文件日志输出和控制台日志输出,可以自定义打印格式。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| from pathlib2 import Path import logbook from logbook import Logger, TimedRotatingFileHandler from logbook.more import ColorizedStderrHandler
class Log(object): format_string = "[{record.time}] [{record.level_name} : {record.channel}] {record.message}" def __init__(self, name="Logging", file_path=None): self.name = name self._file_path = file_path self.logger = None @property def file_handler(self): self._file_path = Path(self._file_path) if "." not in self._file_path.name: self._file_path = self._file_path.joinpath("Log.log") self._file_path.parent.mkdir(exist_ok=True) _log = TimedRotatingFileHandler(str(self._file_path), date_format='%Y-%m-%d', bubble=True, encoding='utf-8') _log.format_string = self.format_string return _log @file_handler.setter def file_handler(self, file_path): self._file_path = file_path @property def std_handler(self): _log = ColorizedStderrHandler(bubble=True) _log.format_string = self.format_string return _log def init(self): logbook.set_datetime_format("local") self.logger = Logger(self.name) self.logger.handlers = [] self.logger.handlers.append(self.std_handler) if self._file_path is not None: self.logger.handlers.append(self.file_handler) def __getattr__(self, item): return getattr(self.logger, item) if __name__ == '__main__': log = Log(name="OMG", file_path="Log/abc.log") log.init() for i in range(100): log.info(f"当前为第{i}论")
|
输出结果
1 2 3 4 5 6 7 8 9 10
| [2019-09-04 11:16:11.281424] [INFO : OMG] 当前为第0论 [2019-09-04 11:16:11.281618] [INFO : OMG] 当前为第1论 [2019-09-04 11:16:11.281695] [INFO : OMG] 当前为第2论 [2019-09-04 11:16:11.281760] [INFO : OMG] 当前为第3论 [2019-09-04 11:16:11.281820] [INFO : OMG] 当前为第4论 [2019-09-04 11:16:11.281877] [INFO : OMG] 当前为第5论 [2019-09-04 11:16:11.281933] [INFO : OMG] 当前为第6论 [2019-09-04 11:16:11.281988] [INFO : OMG] 当前为第7论 [2019-09-04 11:16:11.282043] [INFO : OMG] 当前为第8论 [2019-09-04 11:16:11.282098] [INFO : OMG] 当前为第9论
|
功能说明
时间模块: TimedRotatingFileHandler
- 该程序会根据自定义名称和当前日期,组合成为文件名。
- 例如:
filename='/var/log/foo.log',date_format='%Y-%m-%d'
,那么其文件名为 /var/log/foo-2010-01-10.log
颜色终端: ColorizedStderrHandler
- 会在输出给终端的日志信息中,显示颜色;Windows貌似无效。