保存日志记录调试并仅显示日志记录INFO Python

时间:2020-04-28 14:47:12

标签: python logging

我想将所有日志记录行保存在superwrapper.log中,但仅在控制台中显示INFO。 如果我删除文件名行中的#,则该文件是okey,但在控制台中看不到任何内容。

if __name__ == '__main__':

    logging.basicConfig(
        #filename='superwrapper.log',
        level=logging.DEBUG,
        format='%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )

2020-04-28 11:41:09.698 INFO common - handle_elasticsearch: Elastic connection detected
2020-04-28 11:41:09.699 INFO superwrapper - <module>: Cookies Loaded: |TRUE|
2020-04-28 11:41:09.715 DEBUG connectionpool - _new_conn: Starting new HTTPS connection (1): m.facebook.com:443

2 个答案:

答案 0 :(得分:2)

您可以使用多个处理程序。 logging.basicConfig可以接受/usr/local/lib/node_modules/npm/bin/npm-cli.js:85 let notifier = require('update-notifier')({pkg}) ^^^ SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:374:25) at Object.Module._extensions..js (module.js:417:10) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Function.Module.runMain (module.js:442:10) at startup (node.js:136:18) at node.js:966:3 作为自Python 3.3开始的参数。一个需要登录日志文件,另一个需要控制台。您还可以将处理程序设置为具有不同的日志记录级别。我能想到的最简单的方法是:

handlers

要注意的一件事是import logging import sys file_handler = logging.FileHandler('superwrapper.log') console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) logging.basicConfig( level=logging.DEBUG, format='%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', handlers=[ file_handler, console_handler ] ) 写给strerr。通常,您会希望使用StreamHandler

覆盖它

答案 1 :(得分:0)

您可以设置多个记录器。这将摆脱DEBUG消息,但请注意,严重性更高的消息仍将广播(例如,“ WARNING”和“ ERROR”)。

这种确切的情况在Python文档的logging cookbook中:

import logging

# set up logging to file - see previous section for more details
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename='/temp/myapp.log',
                    filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)

# Now, we can log to the root logger, or any other logger. First the root...
logging.info('Jackdaws love my big sphinx of quartz.')

# Now, define a couple of other loggers which might represent areas in your
# application:

logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')

logger1.debug('Quick zephyrs blow, vexing daft Jim.')
logger1.info('How quickly daft jumping zebras vex.')
logger2.warning('Jail zesty vixen who grabbed pay from quack.')
logger2.error('The five boxing wizards jump quickly.')

在食谱给出的示例中,您应该在控制台中看到所有的“ INFO”,“ WARNING”和“ ERROR”消息,但只有日志文件将保留“ DEBUG”消息。