我有一个 Web Api (.Net Core 3.0),在 AWS 集群 (ECS) 上运行,带有 EC2 实例。在任务定义中,我在容器中配置了 awslog 驱动程序以将日志写入特定日志组/区域。
\n我遇到与 Web API 发出的多行日志消息相关的问题(每一行在 CloudWatch 中的不同日志消息中显示为 splittend)。经过研究,我发现了似乎与此事相关的信息,但我\xc2\xb4m 不确定某些点。
\n我发现了一些有关 CloudWatch Agent 的信息,这些信息似乎与多行配置相关。CloudWatch Agent 是否与我的容器化 Web API 发出的日志消息相关?我的意思是,我的 Web API 向控制台发送日志,并通过 awslog 驱动程序将它们自动抛出到 CloudWatch Logs。所以,我不知道特工在这种情况下是否会做任何事情。
\n关键是,在 CloudWatch Agent 文档中,我读到了与配置文件相关的内容,该文件似乎与多行问题相关:
\n\xe2\x80\x9c multi_line_start_pattern:指定用于识别日志消息开始的模式\xe2\x80\x9d
\n我不知道代理与 awslog 驱动程序有何关系。关于 awslog 驱动程序,我发现这些与多行问题相关的属性可以包含在我的任务定义中:
\n\xe2\x80\x9c awslogs-multiline-pattern:此选项使用正则表达式定义多行起始模式\xe2\x80\x9d
\n\xe2\x80\x9c awslogs-datetime-format:此选项以 Python strftime 格式定义多行开始模式\xe2\x80\x9d
\n那么,CloudWatch Agent 和 awslog 驱动程序配置都可以解决多行问题吗?他们有关系吗?它们适用于不同的范围?
\n提前致谢。
\n首先,我必须说我已经在StackOverflow上阅读了几篇有关此内容的帖子,但我无法获得所需的结果.
让我解释上下文(简化):我使用Linq-to-SQL来查询最近访问商店的客户,并(可选)只获得具有一定金额的付款.假设我有一个客户端,访问和付款类的模型.
所以,专注于Where表达,我正在尝试这个:
Expression<Func<Entityes.Clients, bool>> filter = null;
filter = c =>
c.Visits.Any(v => v.VisitDate > DateTime.Now.Date.AddMonths(-(int)visitsSince));
if (minPayment.HasValue && minPayment.Value > 0)
{
filter.And(
c => c.Payments.Sum(p => p.Quantity) > minPayment.Value);
}
Run Code Online (Sandbox Code Playgroud)
该filter.And方法是一种扩展方法,在本论坛推荐,下面你可以看到定义:
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expression1,
Expression<Func<T, bool>> expression2)
{
InvocationExpression invokedExpression =
Expression.Invoke(expression2, expression1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.And(expression1.Body, invokedExpression), expression1.Parameters);
}
Run Code Online (Sandbox Code Playgroud)
但是,这对我不起作用,并且结果不会按付款金额进行过滤.数据或linq-to-sql模型没有错误,因为此代码工作正常:
filter = c =>
c.Visits.Any(v => v.VisitDate > DateTime.Now.Date.AddMonths(-(int)visitsSince)))
&& c => c.Payments.Sum(p => p.Quantity) > minPayment.Value; …Run Code Online (Sandbox Code Playgroud)