[Tutor] Logging exceptions, but getting stderr output instead

Peter Otten __peter__ at web.de
Wed May 25 15:51:04 EDT 2016


Alex Hall wrote:

> Hello again list,
> I didn't expect to be back so soon. :) I'm trying to log my new script,
> and logger.info() works fine. However, logger.exception() doesn't; I see
> the exception print to stderr, and it never appears in the log. Oddly,
> info messages after that appear in the shell and in my log, whereas
> normally they are only in the log. Here's my logger setup:
> 
> logger = logging.getLogger(appName)
> logger.setLevel(logging.DEBUG)
> infoLogFormatter = logging.Formatter("%(asctime)s\n%(name)s,
> %(levelname)s: %(message)s", datefmt = "%I:%M:%S %p, %B %d, %Y")
> infoLogFileName = appName+".log"
> infoFileHandler = logging.FileHandler(infoLogFileName, mode="w")
> infoFileHandler.level = logging.INFO
> infoFileHandler.setFormatter(infoLogFormatter)
> logger.addHandler(infoFileHandler)
> 
> Then, I deliberately called a non-existant function:
> 
> for rep in reps:
>  try:
>   workbook = xlsxwriter.Workbook(workbookName)
>   worksheet = workbook.addWorksheet(rep.name) #should be add_worksheet, so
> this errors out
>  except:
>   logging.exception("Error generating spreadsheet for {name}".format(name=
> rep.name))

That should be logger.exception(...); logging.exception() logs to the root 
logger.

Unless you know what you are doing I'd still suggest that you add your 
handler(s) to the root logger. In most cases calling logging.basicConfig() 
is probably good enough...



More information about the Tutor mailing list