add multi-level logging