相关疑难解决方法(0)

Python在不同的日志级别记录到多个处理程序?

伙计们,

我正在抓住一个我无法做对的python日志配置.

假设我安装了以下软件包:

mypackage/
   data/mypackage.logging.conf
   module1.py
   module2.py
   scripts/main.py
Run Code Online (Sandbox Code Playgroud)

由于脚本可以交互使用或从crontab运行,因此我有以下要求:

  1. 没有打印声明,一切都通过记录;

  2. 使用a记录timedRotatingFileHandler,始终处于DEBUG级别;

  3. 使用a记录mailinglogger.SummarisingLogger,始终处于INFO级别;

  4. 登录到控制台,默认情况下将级别设置为INFO或通过命令行选项覆盖.

问题是,我可以通过命令行更改日志级别,并相应地更改控制台日志级别,但其他处理程序也更改,我不想要...: - /

在日志记录配置文件中,我不确定我是否理解根记录器级别,其他记录器级别和处理程序级别设置之间的优先级.

这是一些示例代码.任何线索将不胜感激:-)

# mypackage/data/mypackage.logging.conf
[loggers]
root,mypackage

[handlers]
keys=consoleHandler,timedRotatingFileHandler,summarisingHandler

[formatters]
keys=simpleFormatter,consoleFormatter,mypackageFormatter

[logger_root]
#level=INFO
handlers=consoleHandler

[logger_mypackage]
#level=INFO
handlers=timedRotatingFileHandler,summarisingHandler
qualname=mypackage

[handler_consoleHandler]
class=StreamHandler
#level=INFO
formatter=consoleFormatter
args=(sys.stdout,)

[handler_timedRotatingFileHandler]
class=logging.handlers.TimedRotatingFileHandler
level=DEBUG
formatter=mypackageFormatter
args=('mypackage.log', 'M', 1, 5)

[handler_summarisingHandler]
class=mailinglogger.SummarisingLogger
level=INFO
formatter=mypackageFormatter
args=('mypackage@someserver.somewhere.com', ('mypackage-alerts@somewhere.com',), 'relay.somewhere.com')
Run Code Online (Sandbox Code Playgroud)
#mypackage/scripts/main.py:
import logging
import logging.config
import os
import sys

import mypackage.module1
import mypackage.module2

logging.config.fileConfig('data/mypackage.logging.conf')
log = logging.getLogger(__name__)

if __name__ …
Run Code Online (Sandbox Code Playgroud)

python logging config

17
推荐指数
1
解决办法
2万
查看次数

记录模块不在IPython中打印

下面的代码在'ipython qtconsole'中打印'我想要打印',但它不能在普通的IPython中打印.

import logging
import logging.handlers

log = logging.getLogger()
f = logging.Formatter("%(asctime)s - %(module)s.   %(funcName)s - %(levelname)s - %(message)s")
fh = logging.handlers.TimedRotatingFileHandler('log.txt', 'W6')
fh.setFormatter(f)
log.addHandler(fh)
log.setLevel(logging.INFO)
log.info('I want this to print')
Run Code Online (Sandbox Code Playgroud)

在'IPython qtconsole'然而我得到了不同的问题,我试图在这里解释(这不是很好,不需要阅读!).

你能告诉我为什么吗?

编辑:我使用Python 2.7

EDIT2:也许我真的只需要添加logging.StreamHandler.

python logging ipython qtconsole

7
推荐指数
1
解决办法
6431
查看次数

标签 统计

logging ×2

python ×2

config ×1

ipython ×1

qtconsole ×1