Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- logging.basicConfig(level=logging.INFO)
- logger = logging.getLogger(__name__)
- logger.info('Start reading database')
- # read database here
- records = {'john': 55, 'tom': 66}
- logger.debug('Records: %s', records)
- logger.info('Updating records ...')
- # update records here
- logger.info('Finish updating records')
- You can run it and see
- INFO:__main__:Start reading database
- INFO:__main__:Updating records ...
- INFO:__main__:Finish updating records
- What’s different between the “print” approach you asked. Well, of course there are benefits:
- You can control message level and filter out not important ones
- You can decide where and how to output later
- There are different importance levels you can use, debug, info, warning, error and critical. By giving different level to logger or handler, you can write only error messages to specific log file, or record debug details when debugging. Let’s change the logger level to DEBUG and see the output again
- logging.basicConfig(level=logging.DEBUG)
- The output:
- INFO:__main__:Start reading database
- DEBUG:__main__:Records: {'john': 55, 'tom': 66}
- INFO:__main__:Updating records ...
- INFO:__main__:Finish updating records
- As you can see, we adjust the logger level to DEBUG, then debug records appear in output. You can also decide how these messages are processed. For example, you can use a FileHandler to write records to a file.
- import logging
- logger = logging.getLogger(__name__)
- logger.setLevel(logging.INFO)
- # create a file handler
- handler = logging.FileHandler('hello.log')
- handler.setLevel(logging.INFO)
- # create a logging format
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- handler.setFormatter(formatter)
- # add the handlers to the logger
- logger.addHandler(handler)
- logger.info('Hello baby')
Add Comment
Please, Sign In to add comment