implement a logging framework