Python 如何通过编程告诉芹菜将所有日志消息发送到stdout或stderr?
如何以编程方式打开芹菜日志记录? 从终端上看,这可以很好地工作:Python 如何通过编程告诉芹菜将所有日志消息发送到stdout或stderr?,python,logging,celery,Python,Logging,Celery,如何以编程方式打开芹菜日志记录? 从终端上看,这可以很好地工作: celery worker -l DEBUG 当我调用get\u task\u logger(\uuu name\uuuu).debug('hello')时,我可以看到终端中出现了消息。(正在显示stdout和stderr)我甚至可以导入日志并调用logger.info('hi'),也可以看到这一点。(两种方法都有效) 然而,在开发任务时,我更喜欢使用测试模块并直接调用任务函数,而不是启动整个工作程序。但是我看不到日志消息。我知
celery worker -l DEBUG
当我调用get\u task\u logger(\uuu name\uuuu).debug('hello')
时,我可以看到终端中出现了消息。(正在显示stdout和stderr)我甚至可以导入日志
并调用logger.info('hi')
,也可以看到这一点。(两种方法都有效)
然而,在开发任务时,我更喜欢使用测试模块并直接调用任务函数,而不是启动整个工作程序。但是我看不到日志消息。我知道芹菜正在将所有内容重定向到它的内部设备,但我也想看到标准输出上的日志消息
如何告诉芹菜将日志消息的副本发送回stdout?
我在网上读了很多关于日志记录的文章,但似乎芹菜中的一些日志记录相关配置变量已经被弃用,从文档中我不清楚今天支持的路径是什么
下面是一个示例模块,它创建芹菜对象并尝试记录输出。终端中没有显示任何内容。
示例mymodule.py
from celery import Celery
import logging
from celery.utils.log import get_task_logger
app = Celery('test')
app.config_from_object('myfile', True)
get_task_logger(__name__).warn('hello world')
logging.getLogger(__name__).warn('hello world 2')
编辑
我知道我可以添加处理程序,通过添加处理程序将一些输出重定向回终端
log = get_task_logger(__name__)
h = logging.StreamHandler(sys.stdout)
log.addHandler(h)
但有没有“芹菜法”可以做到这一点?也许是一个让我也有芹菜格式的文本行
[2014-03-02 15:51:32,949: WARNING] hello world
我一直在看同一个问题 最有效的方法似乎是使用信号处理器,根据 在
芹菜.py
文件中使用:
from celery.signals import after_setup_logger
import logging
@after_setup_logger.connect()
def logger_setup_handler(logger, **kwargs ):
my_handler = MyLogHandler()
my_handler.setLevel(logging.DEBUG)
my_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') #custom formatter
my_handler.setFormatter(my_formatter)
logger.addHandler(my_handler)
logging.info("My log handler connected -> Global Logging")
if __name__ == '__main__':
app.start()
然后,您可以根据需要定义MyLogHandler()
要将日志发送到STDOUT,您还应该能够使用(我没有测试它):
my_handler = logging.StreamHandler(sys.stdout)