I am currently writing an API and an application which uses the API. I have gotten suggestions from people stating that I should perform logging using handlers in the application and use a "logger" object for logging from the API.
In light of the advice I received above, is the following implementation correct?
class test:
def __init__(self, verbose):
self.logger = logging.getLogger("test")
self.logger.setLevel(verbose)
def do_something(self):
# do something
self.logger.log("something")
# by doing this i get the error message "No handlers could be found for logger "test"
The implementation i had in mind was as follows:
#!/usr/bin/python
"""
....
....
create a logger with a handler
....
....
"""
myobject = test()
try:
myobject.do_something()
except SomeError:
logger.log("cant do something")
I’d like to get my basics strong, I’d be grateful for any help and suggestions for code you might recommend I look up.
Thanks!
It’s not very clear whether your question is about the specifics of how to use logging or about logging exceptions, but if the latter, I would agree with Adam Crossland that log-and-swallow is a pattern to be avoided.
In terms of the mechanics of logging, I would make the following observations:
logger = logging.getLogger(__name__), and this will also work as expected in sub-packages.You should declare handlers, and if your usage scenario is fairly simple you can do this in your main method or
if __name__ == '__main__':clause by adding for exampleand then elsewhere in your code, just do for example
once at the top of each module where you want to use logging, and then
in your code wherever needed.