简体   繁体   中英

Python Logging module - logger does not log on correct level

I try to implement a StreamHandler which logs to stdout at debug level. So far so good, this is my code.

import logging
import sys

# Detaillierter Logger
logger = logging.getLogger()

file_handler = logging.FileHandler("logs.txt")
file_handler.setLevel(logging.ERROR)

stream_handler = logging.StreamHandler(stream=sys.stdout)
stream_handler.setLevel(logging.DEBUG)

formatter = logging.Formatter("%(asctime)s | %(levelname)s | %(message)s")
stream_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

logger.addHandler(stream_handler)
logger.addHandler(file_handler)


# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

I expected to see all logs in my console, but debug and info did not get logged.

(base) C:\Users\User\Desktop\Logging>python script.py
2021-10-30 15:32:49,034 | WARNING | warn message
2021-10-30 15:32:49,034 | ERROR | error message
2021-10-30 15:32:49,035 | CRITICAL | critical message

My logs.txt file is correct. Can anyone tell me how to fix this and WHY the streamhandler does not work as expected?

# You need also
logger.setLevel(logging.DEBUG)

You need to add several logger handlers, not only set logger handler.

import logging
logging.getLogger().addHandler(logging.StreamHandler())

you can also use a config for logging

import logging

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    handlers=[
        logging.FileHandler("debug.log"),
        logging.StreamHandler()
    ]
)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM