简体   繁体   中英

logs not printing in console nor writing in log file in logging

I have a file named helper.py

import logging
import os
from json import load

def get_config(value):
    with open('config.json','r') as f:
        result=load(f)[value]
    return result


def get_logger(name,level):
    logpath=get_config("log_path")
    if not os.path.exists(logpath):
        os.mkdir(logpath)
    logger = logging.getLogger(name)
    if not bool(logger.handlers):
        formatter = logging.Formatter('%(asctime)s.%(msecs)03d - %(name)s - %(levelname)s - %(message)s',datefmt='%Y-%m-%d %H:%M:%S')
        fh = logging.FileHandler(os.path.join(logpath,f'{get_config("log_file_name")}.log'),mode="w",encoding='utf-8')
        fh.setFormatter(formatter)
        logger.addHandler(fh)
        ch = logging.StreamHandler()
        ch.setFormatter(formatter)
        ch.setLevel(level)
        logger.addHandler(ch)
    return logger


LOGGER=get_logger("MyLogger",logging.INFO)

This is config.json :

{
    "save_path" : "results/",
    "log_path" : "logs/",
    "log_file_name" : "MyLog"
}

let's say I am using LOGGER from helper it in x.py

from helper import LOGGER

logger=LOGGER

def div(x,y):
    try:
        logger.info("inside div")
        return x/y
    except Exception as e:
        logger.error(f"div failed due to {e.message if 'message' in dir(e) else e}")


I am using this LOGGER in other files by importing helper.LOGGER for logging purposes but it's not printing anything on the console nor writing in a log file

My attempt:

  • I tried adding sys.stdout in StreamHandler() It doesn't worked
  • Then I tried setting the level of fh but nothing works
  • I tried adding basicConfig() instead of fileHandler() but then printing to console using print() and the output of logs is not coming in the correct order

Kindly let me know where I go wrong

Any help is appreciated :)

Thanks :)

You are not setting the level on the LOGGER , which by default is warning. This is why your info level log is not appearing. The Python documentation has a flow chart illustrating when a log will be logged: https://docs.python.org/3/howto/logging.html#logging-flow

The first thing it does, is that before a logger sends a log to their handlers it checks if the level is enabled for the logger . You should add logger.setLevel(level) in your get_logger() .

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