有没有办法使用logging模块自动将事物输出到stdout 以及它们应该去的日志文件?例如,我想所有呼叫logger.warning,logger.critical,logger.error去他们预期的地方,但除了总是被复制到stdout.这是为了避免重复消息,如:
mylogger.critical("something failed")
print "something failed"
Run Code Online (Sandbox Code Playgroud) 当我在IPython Notebook中运行以下内容时,我看不到任何输出:
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何制作它所以我可以看到笔记本内的"测试"消息?
我不确定该怎么说,但是,我感觉好像有些东西被Google更改了,而我却一无所知。我曾经从日志记录仪表板内Google Cloud Console中的python Cloud Functions中获取日志。现在,它刚刚停止工作。
所以我去研究了很长时间,我刚刚做了一个日志你好世界python Cloud Function:
import logging
def cf_endpoint(req):
logging.debug('log debug')
logging.info('log info')
logging.warning('log warning')
logging.error('log error')
logging.critical('log critical')
return 'ok'
Run Code Online (Sandbox Code Playgroud)
这是我的main.py,我将其部署为带有http触发器的Cloud Function。
由于我拥有所有“调试”级别日志的日志提取排除过滤器,因此在日志记录仪表板中什么都看不到。但是当我删除它时,我发现了这一点:
因此,似乎将python内置日志记录解析为stackdriver的操作停止了对日志严重性参数的解析!对不起,如果我看起来很傻,但这是我唯一能想到的:/
你们对此有任何解释或解决方案吗?我做错了吗?
预先感谢您的帮助。
logging python-3.x google-cloud-platform google-cloud-functions
我有一个基于烧瓶的应用程序。当我在本地运行它时,我从命令行运行它,但是当我部署它时,我用带有多个工人的 gunicorn 启动它。
我想使用该logging模块登录到文件。我为此找到的文档是https://docs.python.org/3/library/logging.html和https://docs.python.org/3/howto/logging-cookbook.html。
当我的应用程序可能使用 gunicorn 启动时,我对使用日志记录的正确方法感到困惑。文档解决了线程问题,但假设我可以控制主进程。混淆点:
会logger = logging.getLogger('myapp')在不同的 gunicorn 工作线程中返回相同的记录器对象吗?
如果我将日志记录附加FileHandler到我的记录器以记录到文件,我如何避免在不同的工作人员中多次执行此操作?
我的理解 - 这可能是错误的 - 是如果我只是调用logger.setLevel(logging.DEBUG),这将通过根记录器发送消息,该记录器可能具有更高的默认日志记录级别并且可能会忽略调试消息,因此我还需要调用logging.basicConfig(logging.DEBUG)以获取我的调试消息通过,渡过。但是文档说不要logging.basicConfig()从线程调用。使用 gunicorn 时如何正确设置根日志记录级别?或者我不需要?