Mergifyio / daiquiri

Python library to easily setup basic logging functionality
Apache License 2.0
333 stars 25 forks source link

Log file shows packages logs and only current app logs #22

Open shlomiLan opened 7 years ago

shlomiLan commented 7 years ago

In my app I create a logger using:


def create_logger(log_path, log_name, log_level=logging.INFO):
    daiquiri.setup(
        level=log_level,
        outputs=(daiquiri.output.File(
            directory=log_path, program_name=log_name), 
            daiquiri.output.STDOUT,))

    return daiquiri.getLogger(program_name=log_name)

When I look at the console, I see logs for my app and also for all the packages that I use in my app, before when I used the default logger I didn't see those messages.

Can I turn it off, so that in my log I will only see my app logs?

jd commented 7 years ago

The level argument is global. What you want do is:

def create_logger(log_path, log_name, log_level=logging.INFO):
    daiquiri.setup(
        outputs=(daiquiri.output.File(
            directory=log_path, program_name=log_name), 
            daiquiri.output.STDOUT,))

    logger = daiquiri.getLogger(program_name=log_name)
    logger.setLevel(log_level)
    return logger
jd commented 7 years ago

Setting documentation tag since it could be a cool example in doc.

shlomiLan commented 7 years ago

Thanks

shlomiLan commented 7 years ago

I have tried to use your code and got the following error:

  File "utils.py", line 22, in create_logger
    logger.setLevel(log_level)
AttributeError: 'KeywordArgumentAdapter' object has no attribute 'setLevel'

What I'm doing wrong?

jd commented 7 years ago

@shlomiLan

My bad, the adapter returned by daiquiri does not support that. We should probably enhance that too. Try:

def create_logger(log_path, log_name, log_level=logging.INFO):
    daiquiri.setup(
        outputs=(daiquiri.output.File(
            directory=log_path, program_name=log_name), 
            daiquiri.output.STDOUT,))

    logging.getLogger(log_name).setLevel(log_level)
    return daiquiri.getLogger(program_name=log_name)
shlomiLan commented 7 years ago

The only way I have managed to change the logger log level is with: daiquiri.getLogger(program_name=log_name).logger.level = log_level