三个内置引擎
BaseEngine
引擎的基础类,实现功能引擎的抽象类。初始化:初始化主引擎,事件引擎和引擎名。
下面三个内置功能引擎都继承该类
1. LogEngine 日志引擎
处理日志事件和日志输出
日志引擎主要是对python logging模块的进一步义封装。这里对其基于vnpy做简单说明。实例化日志引擎时,加载了logging模块的基本配置:
def __init__(self, main_engine: MainEngine, event_engine: EventEngine):
super(LogEngine, self).__init__(main_engine, event_engine, "log")
if not SETTINGS["log.active"]: # 是否启动日志
return
self.level = SETTINGS["log.level"] # 日志记录级别 默认为最高50 因此默认情况下不会输出任何信息
self.logger = logging.getLogger("VN Trader") # 使用工厂方法返回一个Logger实例。
self.logger.setLevel(self.level) # 设置日志级别
self.formatter = logging.Formatter("%(asctime)s %(levelname)s: %(message)s") # 日志记录样式
self.add_null_handler() #
if SETTINGS["log.console"]:
self.add_console_handler() # 添加控制台输出
if SETTINGS["log.file"]:
self.add_file_handler() # 添加文件输出
self.register_event() # 注册事件
关于本地的配置SETTINGS可以在vnpy/trader/setting.py中找到(我自己开发时将不同功能的配置信息分割到不同文件,比如日志的配置写在一个文件,邮件的写在另一个文件),可以看到,vnpy将日志级别设置到最高,在loggging模块中定义,仅仅在该等级以上(或相等)才会反馈信息。因此默认情况下只有出现严重错误时才会出现反馈,否则不会产生任何日志信息,这里为了测试需要将日志级别该低一些(我调到了20,也就是DEBUG级别)。
日志级别及数值以及使用场景见下表:
类型 | 数值 | 描述 |
---|---|---|
CRITICAL | 50 | 严重错误,表明软件已不能继续运行了。 |
ERROR | 40 | 由于更严重的问题,软件已不能执行一些功能了。 |
WARNING | 30 | 某些没有预料到的事件的提示,或者在将来可能会出现的问题提示。例如:磁盘空间不足。但是软件还是会照常运行。 |
INFO | 20 | 证明事情按预期工作。 |
DEBUG | 10 | 详细信息,一般只在调试问题时使用。 |
NOTSET | 0 | – |
接着,程序使用add_null_handler
、add_console_handler
和add_file_handler
添加三个处理器,分别对日志的处理方式进行定义。