簡體   English   中英

使用Pyramid和rq寫入相同的日志文件

[英]Writing to same log file with Pyramid and rq

我正在使用Pyramid和rq ,我想將rq worker作業記錄在與Pyramid應用程序相同的文件中。

我的設置如下:

development.ini

# regular pyramid setup here...

[loggers]
keys = root, main

[handlers]
keys = console, debuglog

[formatters]
keys = generic

[logger_root]
level = DEBUG
handlers = console, debuglog

[logger_main]
level = DEBUG
handlers =
qualname = main

[handler_debuglog]
class = handlers.RotatingFileHandler
args = ('%(here)s/__logs/pyramid_debug.log','a')
level = DEBUG
formatter = generic

[formatter_generic]
format = %(asctime)s %(levelname)-8s [%(name)s][%(threadName)s] %(message)s

main.py

from bunch import Bunch
from redis import Redis
from rq import Queue, Worker
from helpers.rqworker import run_worker
from helpers.log import write_log

write_log('info', 'APP STARTED.')
q = Queue(connection=Redis())
req_obj = Bunch()
req_obj.remote_addr = self.request.remote_addr
job = q.enqueue(run_worker, req_obj, {'some_other': 'data'})
write_log('info', 'APP ENDED.')

助手/ rqworker.py

from helpers.log import write_log

def run_worker(req, data):
    write_log(req, 'debug', 'WORKER STARTED', separator=True)

助手/ log.py

import logging
log = logging.getLogger(__name__)


def write_log(request, loglevel, message=None, **kwargs):
    msg = '[{0}] {1}'.format(request.remote_addr, message)
    level = logging.getLevelName(loglevel.upper())

    if 'separator' in kwargs:
        log.log(level, '='*40)

    if message:
        log.log(level, msg)

    if 'stack' in kwargs:
        log.log(level, '{0} EXCEPTION {0}'.format('*'*15))
        log.log(level, kwargs['stack'])
        log.log(level, '{0} EXCEPTION END {0}'.format('*'*13))

當我運行我的應用程序時,我看不到來自rqworker.py日志(可能是因為它是一個單獨的線程)所以我想知道我怎么能(並且有可能)實現寫入相同的日志文件?

這可能對OP沒有用了,但是我能夠將rq Worker的輸出重定向到自定義文件的方法是通過這樣獲取記錄器:

logger = logging.getLogger('rq.worker')

您可以將新的FileHandler添加到您的文件輸出的此記錄器中,並更改格式:

h = logging.FileHandler("/path/to/logfile.log")
formatter = logging.Formatter(...)
fh.setFormatter(formatter)
logger.addHandler(fh)

但是,我無法刪除輸出的顏色,這會導致日志在文本編輯器中打開時,會使用ANSI顏色代碼稍微混亂。

請注意,這會刪除到控制台的日志記錄。 您可以通過添加另一個處理程序來保留它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM