龙卷风自定义日志记录

时间:2015-10-02 13:00:55

标签: tornado

我正在尝试在Tornado中创建自己的自定义日志记录处理程序,但似乎正在碰壁砖。我现在是一个非常基本的测试脚本,我想简单地测试一下这个概念。我的代码是:

 # bunch of imports here

 # logging definitions
 import logging
 myFormat = ("[%(process)d] %(levelname)s %(asctime)s %(message)s")
 formatter = logging.Formatter(myFormat)
 myLogger = logging.getLogger()
 myLogger.setLevel(logging.DEBUG)

 class Application(tornado.web.Application):
    def __init__(self):
         handlers = [
            (r"/", HomeHandler),
         (r"/process", ProcessHandler),
    ]
    super(Application, self).__init__(handlers, default_handler_class=my404Handler

class ProcessHandler(myBaseHandler):
    @tornado.gen.coroutine
    def _initialize(self):
            res = yield self.buildJSON('I am just testing JSON')
            raise tornado.gen.Return(res)

    @tornado.web.asynchronous
    @tornado.gen.coroutine
    def get(self):
            self.write("Processing....")
            response = yield self._initialize()
            self.clear()
            self.set_header('Content-Type', 'application/json; charset=UTF-8')
            self.finish(response)


    @tornado.gen.coroutine
    def buildJSON(self, xmlText):
            myLogger.debug("Step 1 logging")
            # If you want JSON format, use the code below of 4 lines
            data = {}
            data['MessageOutput'] = xmlText
            data['Format'] = 'json'
            return json.dumps(data)

if __name__ == "__main__":
    fh = logging.FileHandler('xmljson.log')
    fh.setFormatter(myFormat)
    fh.setLevel(logging.DEBUG)
    # add the handler to logger
    myLogger.addHandler(fh)
    main()

我在xmljson.log中得到的输出如下:

[%(process)d] %(levelname)s %(asctime)s %(message)s
[%(process)d] %(levelname)s %(asctime)s %(message)s
[%(process)d] %(levelname)s %(asctime)s %(message)s
[%(process)d] %(levelname)s %(asctime)s %(message)s
[%(process)d] %(levelname)s %(asctime)s %(message)s
[%(process)d] %(levelname)s %(asctime)s %(message)s
[%(process)d] %(levelname)s %(asctime)s %(message)s
[%(process)d] %(levelname)s %(asctime)s %(message)s
[%(process)d] %(levelname)s %(asctime)s %(message)s

我错过了我要求的1个错误"第1步记录"。 Tornado屏幕/显示器上没有任何显示,我想这很好。我做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

调用setFormatter时出错:您需要传递Formatter对象而不是格式字符串。将setFormatter(myFormat)更改为setFormatter(formatter)即可。