Skip to content

Instantly share code, notes, and snippets.

@saml
Created October 16, 2015 21:23
Show Gist options
  • Save saml/536175c82c72adb5f779 to your computer and use it in GitHub Desktop.
Save saml/536175c82c72adb5f779 to your computer and use it in GitHub Desktop.
import argparse
import logging
from celery import Celery
from celery.utils.log import get_task_logger
from flask import Flask, jsonify
app = Flask(__name__)
c = Celery(__name__, broker='amqp://localhost:5672//')
default_logger = c.log.get_default_logger()
log = get_task_logger(__name__)
@c.task
def f(x):
log.info('Got x = %s', x)
return x + 1
@app.route('/')
def index():
result = f.delay(1)
return jsonify(id=result.id)
def configure_logging(logger):
log_level = logging.INFO
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
stream_handler = logging.StreamHandler()
stream_handler.setLevel(log_level)
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
logger.setLevel(log_level)
if __name__ == '__main__':
configure_logging(default_logger)
#configure_logging(log)
# When I don't configure log, task logger, I don't get log line for the task, Got x = ...
# When I configure task logger, I get the following duplicate logs:
# 2015-10-16 17:21:43,958 INFO Got x = 1
# [2015-10-16 17:21:43,958: INFO/Worker-1] __main__.f[221221cf-bdba-4854-ab49-17cad2530189]: Got x = 1
parser = argparse.ArgumentParser()
parser.add_argument('cmd', choices=['server', 'worker'])
args = parser.parse_args()
if args.cmd == 'server':
app.run()
elif args.cmd == 'worker':
c.worker_main(argv=[__file__])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment