Logging between classes in python

前端 未结 1 1740
猫巷女王i
猫巷女王i 2020-12-24 08:39

I have three classes in python and they run in different threads. I would like to have output to the same file from all classes. Right now I created output method in main cl

相关标签:
1条回答
  • 2020-12-24 09:27
    import logging
    log = logging.getLogger("mylog")
    log.setLevel(logging.DEBUG)
    
    formatter = logging.Formatter(
        "%(asctime)s %(threadName)-11s %(levelname)-10s %(message)s")
    # Alternative formatting available on python 3.2+:
    # formatter = logging.Formatter(
    #     "{asctime} {threadName:>11} {levelname} {message}", style='{')
    
    # Log to file
    filehandler = logging.FileHandler("debug.txt", "w")
    filehandler.setLevel(logging.DEBUG)
    filehandler.setFormatter(formatter)
    log.addHandler(filehandler)
    
    # Log to stdout too
    streamhandler = logging.StreamHandler()
    streamhandler.setLevel(logging.INFO)
    streamhandler.setFormatter(formatter)
    log.addHandler(streamhandler)
    
    # Test it
    log.debug("Some message")
    log.error("An error!")
    try:
        something()
    except:
        log.exception("An exception occured!")
    

    And get in debug.txt:

    2011-01-18 12:07:24,943  MainThread  DEBUG      Some message
    2011-01-18 12:07:24,943  MainThread  ERROR      An error!
    2011-01-18 12:07:24,943  MainThread  ERROR      An exception occured!
    Traceback (most recent call last):
      File "./logtest.py", line 17, in 
        something()
    NameError: name 'something' is not defined
    

    Note that the order in which the messages appear in the log file may not correspond exactly to the order in which they happened when you're logging from several threads.

    0 讨论(0)
提交回复
热议问题