我有一个flask应用程序,redis worker(worker.py)在后台运行。有一个单独的模块(selenium.py)运行selenium来完成一些任务。此模块通过redis排队以执行作业。我正在尝试将所有进程记录到一个文件中。但是,redis将(selenium.py)中的所有日志打印到控制台中,而不是将它们放入我指定的日志文件中。
日志配置位于主文件(app.py)中:
import logging
from logging.handlers import RotatingFileHandler
import logging.config
from rq import Queue
from rq.job import Job
from worker import conn
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('app')
logger.warning('Started app.py!')
工人.py:
import os
import redis
from rq import Worker, Queue, Connection
listen = ['default']
redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
conn = redis.from_url(redis_url)
if __name__ == '__main__':
with Connection(conn):
worker = Worker(list(map(Queue, listen)))
worker.work()
selenium .py
import logging
logger = logging.getLogger('app')
logger.info('Selenium ran successfully!')
...Selenium Code Here...
日志记录.conf
[loggers]
keys=root
[handlers]
keys=logfile
[formatters]
keys=logfileformatter
[logger_root]
level=INFO
handlers=logfile
[handler_logfile]
class=handlers.RotatingFileHandler
level=NOTSET
args=('logs/my_log.log','a',100000,50)
formatter=logfileformatter
[formatter_logfileformatter]
format=%(asctime)s %(name)-12s: %(levelname)s %(message)s
控制台输出(对于worker.py):
Selenium ran successfully!
日志输出:
Started app.py!
预期的日志输出(我想要的):
Started app.py!
Selenium ran successfully!
所以给了 flask 和redis。如何使用python的日志系统将日志合并到一个输出文件中?
1条答案
按热度按时间ippsafx71#
这是我提出的解决办法。
flask (或app.py):
在logsetup.py中(您可以在这里调整格式并为不同的文件添加处理程序):
现在有魔法了
对于通过flask导入并通过flask运行的模块,请转到模块并插入以下代码:
对于与flask分开运行的模块,例如worker.py:
我不认为这是解决你问题的最好办法,但我不确定是否是。我只是相信这至少是一种在登录到一个中心文件时并行运行许多python应用程序的好方法。