blueFast
blueFast

Reputation: 44441

Setting the log level causes fabric to complain with 'No handlers could be found for logger "ssh.transport"'

The following script:

#!/usr/bin/env python
from   fabric.api import env, run
import logging

logging.getLogger().setLevel(logging.INFO)

env.host_string = "%s@%s:%s" % ('myuser', 'myhost', '22')
res = run('date', pty = False)

Produces the following output:

[myuser@myhost:22] run: date
No handlers could be found for logger "ssh.transport"
[myuser@myhost:22] out: Thu Mar 29 16:15:15 CEST 2012

I would like to get rid of this annoying error message: No handlers could be found for logger "ssh.transport" The problem happens when setting the log level (setLevel).

How can I solve this? I need to set the log level, so skipping that won't help.

Upvotes: 1

Views: 2086

Answers (2)

blueFast
blueFast

Reputation: 44441

My hack is ugly but works:

# This is here to avoid the mysterious messages: 'No handlers could be found for logger "ssh.transport"'

class MyNullHandler(logging.Handler):
    def emit(self, record):
        pass

bugfix_loggers = { }
def bugfix(name):
    global bugfix_loggers
    if not name in bugfix_loggers:
        # print "Setting dummy logger for '%s'" % (name)
        logging.getLogger(name).addHandler(MyNullHandler())
        bugfix_loggers[name] = True

Upvotes: 0

user590028
user590028

Reputation: 11728

You need to initialize the logging system. You can make the error go away by doing so in your app thusly:

import logging
logging.basicConfig( level=logging.INFO )

Note: this uses the default Formatter, which is not terribly useful. You might consider something more like:

import logging
FORMAT="%(name)s %(funcName)s:%(lineno)d %(message)s"
logging.basicConfig(format=FORMAT, level=logging.INFO)

Upvotes: 2

Related Questions