implement qp.Logger