我正在尝试在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屏幕/显示器上没有任何显示,我想这很好。我做错了什么?
由于
答案 0 :(得分:0)
调用setFormatter
时出错:您需要传递Formatter
对象而不是格式字符串。将setFormatter(myFormat)
更改为setFormatter(formatter)
即可。