首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在双绞线中设置日志记录级别?

如何在双绞线中设置日志记录级别?
EN

Stack Overflow用户
提问于 2018-03-02 06:09:55
回答 4查看 2.6K关注 0票数 3

我使用的是带有扭曲的autobahn包,它为我显示了每一个连接到websocket的调试消息。我试图将日志记录级别切换到info,但没有成功:

代码语言:javascript
复制
import logging
logging.basicConfig(level=logging.INFO)

是否有一种简单的方式来切换日志级别?

更新.

下面是twisted_service.py:

代码语言:javascript
复制
from twisted.application import service
from twisted.logger import Logger
import logging
logging.basicConfig(level=logging.INFO)


class WebsocketService(service.Service):
    log = Logger()

    def startService(self):
        service.Service.startService(self)
        self.log.debug('start service')

application = service.Application("ws")

ws_service = WebsocketService()
ws_service.setServiceParent(application)

我使用twistd脚本运行它:twistd -noy twisted_service.py并收到一条消息:

2018-03-03T10:45:22+0500 builtin.WebsocketService#debug启动服务

logging.basicConfig没有帮忙。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-03-05 13:00:34

我找到了解决办法:

代码语言:javascript
复制
import sys
from twisted.application import service
from twisted.logger import LogLevelFilterPredicate, LogLevel
from twisted.logger import textFileLogObserver, FilteringLogObserver


class WebsocketService(service.Service):
    log = Logger()

    def startService(self):
        service.Service.startService(self)
        self.log.debug('start service')

application = service.Application("ws")

ws_service = WebsocketService()
ws_service.setServiceParent(application)

info_predicate = LogLevelFilterPredicate(LogLevel.info)
log_observer = FilteringLogObserver(textFileLogObserver(sys.stdout), predicates=info_predicate)

application.setComponent(ILogObserver, log_observer)
票数 3
EN

Stack Overflow用户

发布于 2018-03-02 11:42:17

若要查找所有记录器及其相应名称,请执行:

代码语言:javascript
复制
logging.Logger.manager.loggerDict.keys()

尝试通过获取噪音记录器实例显式地设置它:

代码语言:javascript
复制
import logging

noisyLogger = logging.getLogger("autobahn")  # adjust logger name
# noisyLogger.getEffectiveLevel()  # indicates the current effective level
noisyLogger.setLevel(logging.INFO)
票数 2
EN

Stack Overflow用户

发布于 2020-06-27 19:32:40

我用kalombo的答案为我自己的项目找出了一个解决方案,因为我找不到很多关于这个主题的信息,所以我将在这里分享一些内容,而且我仍然需要找出一些事情。此示例允许我们同时登录到stdout和一个文件,并为每个日志级别选择不同的日志级别。

(还感谢https://stackoverflow.com/a/46651223/213445将日志记录到多个文件。)

详细情况如下:

  • 变量"logtargets“是FilteringLogObserver实例的列表。
  • 每个FilteringLogObserver封装一个textFileLogObserver,并强制一个LogLevelFilterPredicate。我们只为stdout做一次,为"logfile“做一次。
  • LogLevelFilterPredicate通过其“谓词”参数将最大值 LogLevel传递给FilteringLogObserver。
  • FilteringLogObserver 的“谓词”参数必须是可迭代的,因此在传递它时,我们将LogLevelFilterPredicate包装在一个列表中。
  • 最后,我们将“日志目标”列表传递给globalLogBeginner.beginLoggingTo()。
  • 所有未来的Twisted Logger实例都将指向我们的两个日志目标。
  • 我们可以有多个Logger实例,一个用于我们程序的每个子系统,而对于每个实例,我们给它一个参数,这是来自该子系统的日志行的名称空间。
代码语言:javascript
复制
import sys
from twisted.logger import Logger, LogLevel, LogLevelFilterPredicate, \
    textFileLogObserver, FilteringLogObserver, globalLogBeginner

logfile = open("application.log", 'a')
logtargets = []

# Set up the log observer for stdout.
logtargets.append(
    FilteringLogObserver(
        textFileLogObserver(sys.stdout),
        predicates=[LogLevelFilterPredicate(LogLevel.warn)]
    )
)

# Set up the log observer for our log file. "debug" is the highest possible level.
logtargets.append(
    FilteringLogObserver(
        textFileLogObserver(logfile),
        predicates=[LogLevelFilterPredicate(LogLevel.debug)]
    )
)

# Direct the Twisted Logger to log to both of our observers.
globalLogBeginner.beginLoggingTo(logtargets)

# Start a logger with a namespace for a particular subsystem of our application.
log = Logger("mynamespace")

log.warn("Goes to both outputs.") # Outputs will start with [mynamespace#warn]
log.error("Also go to both outputs; error is higher priority than warn.")
log.debug("Only goes to log file.")
log.info("Also only goes to log file; info is lower priority than warn.")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49063649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档