伙计们,
我正在抓住一个我无法做对的python日志配置.
假设我安装了以下软件包:
mypackage/
data/mypackage.logging.conf
module1.py
module2.py
scripts/main.py
Run Code Online (Sandbox Code Playgroud)
由于脚本可以交互使用或从crontab运行,因此我有以下要求:
没有打印声明,一切都通过记录;
使用a记录timedRotatingFileHandler,始终处于DEBUG级别;
使用a记录mailinglogger.SummarisingLogger,始终处于INFO级别;
登录到控制台,默认情况下将级别设置为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) 下面的代码在'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.