python - 格式化tornado.access 的默认Python 日志记录

标签 python json logging tornado

我想更改默认的tornado.access日志的格式

这是默认的日志格式:

INFO:tornado.access:200 GET / (127.0.0.1) 1.09ms

这是我的日志配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose_json': {
            'format': """
            {
                Time: %(asctime)s,
                Level: %(levelname)s ,
                Name: %(name)s:%(lineno)s,
                Message: %(message)s
            }
            """,
            'datefmt' : "%d-%b-%Y %H:%M:%S"
        },
    },
    'filters': {
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose_json'
        },
    },
    'loggers': {
        '': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    }
}

这就是我在 app.py 服务器启动器文件中加载配置文件的方式:

logging.config.dictConfig(LOGGING)

此配置生成此格式化日志:

  {
        Time: 13-May-2016 16:19:03,
        Level: INFO ,
        Name: tornado.access:1946,
        Message: 200 POST / (127.0.0.1) 0.93ms
  }

但我想将其显示为这样的 json,其中格式如下所示,并且节点可以包含内部 json:

{   
  Time: 13-May-2016 16:19:03,    
  Level: INFO ,    
  Name: tornado.access:1946,  
  Message: {
     Status_Code: 200,
     Method: POST,
     URL: /,
     Remote_IP: 127.0.0.1,
     Elapse_Time: 0.93ms  
  } 
}

最佳答案

要获取更详细的信息,您需要向您的应用程序提供log_function:

def log_function(handler):
    info = {
        'Status_Code': handler.get_status(),
        'Method': handler.request.method,
        'URL': handler.request.uri,
        'Remote_IP': handler.request.remote_ip,
        'Elapsed_Time': '%.2fms' % (handler.request.request_time()*1000)
    }
    tornado.log.access_log.info(json.dumps(info, indent=4))

# try it out with a dummy application
app = Application([], log_function=log_function)
app.listen(8888)
IOLoop.current().run_sync(lambda: AsyncHTTPClient().fetch(
    'http://localhost:8888/', follow_redirects=False, raise_error=False))

关于python - 格式化tornado.access 的默认Python 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37208063/

相关文章:

javascript - HighCharts:可以汇总系列数据并在标题中显示吗?

json - 通过 Go 在 Protocol Buffers v3 的 oneOf 字段中使用结构

javascript - Json 字符串未显示在我的 jsp 页面上

java - SimpleFormatter 忽略 java.util.logging.SimpleFormatter.format 属性

android - 那么如何在 Jelly Bean 中查看日志呢?

python - AWS Lambda Python 与 MySQL

python - 如何在Spark中调用python脚本?

java - 如何在org.ops4j.pax.logging.cfg中使用环境变量?

python - Keras 网络永远无法分类最后一类

python - 为什么这是类型错误而不是语法错误