【问题标题】:Log messages from Django application not uploaded in AWS CloudWatch来自 Django 应用程序的日志消息未上传到 AWS CloudWatch
【发布时间】:2022-10-01 16:21:01
【问题描述】:

我在我的 Django 应用程序中添加了日志消息,它成功地将日志消息记录到日志文件中。

现在,我尝试将日志消息添加到 AWS CloudWatch。当我运行应用程序时,它会在 AWS CloudWatch 中创建 log group,但未创建 log stream,也未上传日志消息。

我还在 AWS CloudWatch 中手动创建了log stream,但仍然没有上传日志消息。

我的 Django 应用程序中有以下日志记录配置。

logger_boto3_client = boto3.client(
    \"logs\",
    aws_access_key_id=CLOUDWATCH_AWS_ID,
    aws_secret_access_key=CLOUDWATCH_AWS_KEY,
    region_name=AWS_DEFAULT_REGION,
)

LOGGING = {
    \'version\': 1,
    \'disable_existing_loggers\': False,
    \'formatters\': {
        \'simple\': {
            \'format\': \"[cid: %(cid)s] [%(asctime)s.%(msecs)03d] %(levelname)s [%(name)s:%(lineno)s] [%(funcName)s] %(message)s\",
            \'datefmt\': \'%Y-%m-%d %H:%M:%S\',
        },
    },
    \'handlers\': {
        \'logger\': {
            \'level\': \'DEBUG\',
            \'class\': \'logging.handlers.RotatingFileHandler\',
            \'filename\': str(BASE_DIR) + \'/logs/test.log\',
            \'formatter\': \'simple\',
            \'filters\': [\'correlation\'],
        },
        \'watchtower\': {
            \"level\": \"DEBUG\",
            \"class\": \"watchtower.CloudWatchLogHandler\",
            \"boto3_client\": logger_boto3_client,
            \"log_group\": \"DemoLogs2\",
            # Different stream for each environment
            \"stream_name\": \"logs\",
            \"formatter\": \"simple\",
            \'filters\': [\'correlation\'],
        }
    },
    \'filters\': {
        \'correlation\': {
            \'()\': \'cid.log.CidContextFilter\'
        },
    },
    \'loggers\': {
        \'root\': {
            \'handlers\': [\'logger\', \'watchtower\'],
            \'level\': \'DEBUG\',
            \'filters\': [\'correlation\'],
            \'propagate\': True,
        }
    }
}

在我的应用程序中,我正在使用这样的记录器,

import logging


logger = logging.getLogger(__name__)
logger.info(\"log message.\")

我的aws cloudwatch 控制台。

  • 最可能的原因是分配给您从中获取访问密钥的 AWS 账户的 IAM 权限没有在 CloudWatch Logs 中创建日志流的权限。
  • @MarkB但我可以从aws cloudwatch控制台以IAM用户身份手动创建日志流。在创建此 IAM 用户时,我获得了完整的 cloudwatch 访问权限。
  • AWS_DEFAULT_REGION 的值是多少你确定你在寻找正确的区域吗?
  • @MarkB 是的。我已经检查过了。我正在查看正确的区域。

标签: django amazon-web-services amazon-cloudwatch aws-cloudwatch-log-insights django-logging


【解决方案1】:

问题在于在 API 中调用 logger

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'default': {
            'format': "[cid: %(cid)s] [%(asctime)s.%(msecs)03d] %(levelname)s [%(name)s:%(lineno)s] [%(funcName)s] %(message)s",
            'datefmt': '%Y-%m-%d %H:%M:%S',
        }
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': str(BASE_DIR) + '/logs/test.log',
            'formatter': 'default',
            'filters': ['correlation'],
        }
        'cloudwatch': {
            "level": "DEBUG",
            "class": "watchtower.CloudWatchLogHandler",
            "boto3_client": logger_boto3_client,
            "log_group": CLOUDWATCH_LOG_GROUP,
            "stream_name": f"{ENV}-{CLOUDWATCH_DEFAULT_LOG_STREAM_NAME}",
            "formatter": "default",
            'filters': ['correlation'],
        }
    },
    'filters': {
        'correlation': {
            '()': 'cid.log.CidContextFilter'
        },
    },
    'loggers': {
        # previously named as 'root'
        'default': {
            'level': 'DEBUG',
            'handlers': ['file', 'cloudwatch'],
            'filters': ['correlation'],
            'propagate': False,
        },
    }
}

在 API 中,

import logging


# logger = logging.getLogger(__name__)
logger = logging.getLogger("default")
logger.info("log message.")

以前我将__name__ 传递给getLogger 方法。现在,我将记录器名称default 传递给getLogger 方法,现在我可以在log 文件和cloudwatch 中看到日志消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2022-09-26
    • 2018-08-29
    相关资源
    最近更新 更多