小编Pra*_*nik的帖子

登录异步函数时如何使用request_id?

在异步函数中,每个记录器语句都会获取自己的 request_id。

import logging
log = logging.getLogger('test_logger')

def sync_fun():
    log.info("test 1")
    log.info("test 2")
    log.info("test 3")

@after_response.enable
def async_fun():
    log.info("test 1")
    log.info("test 2")
    log.info("test 3")    

output of sync_fun:
[06/Nov/2019 10:42:00.234] [None] [130C6C47F1E24164AAC0440C719630] [INFO] Test 1
[06/Nov/2019 10:42:00.234] [None] [130C6C47F1E24164AAC0440C719630] [INFO] Test 2
[06/Nov/2019 10:42:00.234] [None] [130C6C47F1E24164AAC0440C719630] [INFO] Test 3
Run Code Online (Sandbox Code Playgroud)

130C6C47F1E24164AAC0440C719630 是一个 request_id,对于所有记录器语句都是通用的。

output of async_fun:
[06/Nov/2019 10:42:00.234] [None] [AB352B8F2DF9459ABDD2FBF51EB05F] [INFO] Test 1
[06/Nov/2019 10:42:00.234] [None] [V9E9B6DF5F9C442195EA7C1379FBFA] [INFO] Test 2
[06/Nov/2019 10:42:00.234] [None] [DCA311A92724443C9AD7E951288917] [INFO] Test 3
Run Code Online (Sandbox Code Playgroud)

async_fun 是一个异步函数,所有记录器语句的请求 ID 都不同。

如何为异步函数中的每个记录器语句获取相同的 …

python django logging asynchronous

5
推荐指数
1
解决办法
1926
查看次数

没有使用瞭望塔将正确的日志记录(python)格式发送到 Cloudwatch

我编写了以下代码来启用 Cloudwatch 支持。

import logging
from boto3.session import Session
from watchtower import CloudWatchLogHandler

logging.basicConfig(level=logging.INFO,format='[%(asctime)s.%(msecs).03d] [%(name)s,%(funcName)s:%(lineno)s] [%(levelname)s]  %(message)s',datefmt='%d/%b/%Y %H:%M:%S')
log = logging.getLogger('Test')

boto3_session = Session(aws_access_key_id=AWS_ACCESS_KEY_ID,
                aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                region_name=REGION_NAME)

cw_handler = CloudWatchLogHandler(log_group=CLOUDWATCH_LOG_GROUP_NAME,stream_name=CLOUDWATCH_LOG_STREAM_NAME,boto3_session=boto3_session)
log.addHandler(cw_handler)
Run Code Online (Sandbox Code Playgroud)

每当我尝试打印任何记录器语句时,我都会在本地系统和 cloudwatch 上得到不同的输出。

例子:

log.info("Hello world")
Run Code Online (Sandbox Code Playgroud)

以上记录器语句在我的本地系统(终端)上的输出:

[24/Feb/2019 15:25:06.969] [Test,<module>:1] [INFO]  Hello world
Run Code Online (Sandbox Code Playgroud)

cloudwatch(日志流)上上述记录器语句的输出:

Hello world
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?

python logging amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs

2
推荐指数
1
解决办法
2217
查看次数