python - Is there a way to change the filemode for a logger object that is not configured using basicConfig? -
if create logger object using logger = logging.getlogger("name") unable change filemode append('a') write ('w'). can if use root logger basicconfig, lot of system debug messages being logged when want own messages beginning @ debug level.
i hoping either (1) change filemode own logger object 'w' or (2) add filter root logger. possible filter out these debug messages root logger?
def create_log(): # create logger "sample app" # create logger "sample app" logger = logging.getlogger('automated_testing') logger.setlevel(logging.debug) # create file handler logs debug messages fh = logging.filehandler('results.log') fh.setlevel(logging.debug) # create console handler higher log level ch = logging.streamhandler(stream=sys.stdout) ch.setlevel(logging.debug) # create formatter , add handlers formatter = logging.formatter('[%(asctime)s] %(levelname)8s --- %(message)s ' + '(%(filename)s:%(lineno)s)',datefmt='%y-%m-%d %h:%m:%s') fh.setformatter(formatter) ch.setformatter(formatter) # add handlers logger logger.addhandler(ch) logger.addhandler(fh) return logger
something like:
import sys import logging def create_logger(): # create logger "sample app" logger = logging.getlogger('automated_testing') logger.setlevel(logging.debug) # create file handler logs debug messages fh = logging.filehandler('results.log', mode='w') fh.setlevel(logging.debug) # create console handler higher log level ch = logging.streamhandler(stream=sys.stdout) ch.setlevel(logging.info) # create formatter , add handlers formatter = logging.formatter('[%(asctime)s] %(levelname)8s --- %(message)s ' + '(%(filename)s:%(lineno)s)',datefmt='%y-%m-%d %h:%m:%s') fh.setformatter(formatter) ch.setformatter(formatter) # add handlers logger logger.addhandler(ch) logger.addhandler(fh) return logger logger = create_logger() logger.log(logging.notset, "notset message - 0") logger.log(logging.debug, "debug message - 10") logger.log(logging.info, "info message - 20") logger.log(logging.warning, "warning message - 30") logger.log(logging.critical, "critical message - 40")
prints stdout:
[2015-03-16 17:51:08] info --- info message - 20 (temp3.py:34) [2015-03-16 17:51:08] warning --- warning message - 30 (temp3.py:35) [2015-03-16 17:51:08] critical --- critical message - 40 (temp3.py:36)
writes (not appends) results.log:
[2015-03-16 17:51:08] debug --- debug message - 10 (temp3.py:33) [2015-03-16 17:51:08] info --- info message - 20 (temp3.py:34) [2015-03-16 17:51:08] warning --- warning message - 30 (temp3.py:35) [2015-03-16 17:51:08] critical --- critical message - 40 (temp3.py:36)
debug
+ logged in results.txt while info
+ send stdout.
note notset
log entry passed root logger then, since don't have handlers on root logger, discarded.
Comments
Post a Comment