abstractions to support logging