EventFlow - 创建自定义过滤器以附加源服务器信息
EventFlow - Creating a Custom Filter to attach Source Server Information
我假设这是一个很常见的问题,我们如何轻松地将服务器信息添加到 EventFlow 事件?
我的情况是,我正在部署一个应用程序,该应用程序将具有自己的特定环境 EventFlowConfig.json,但场中的每台服务器都将获得相同的 json 文件。那么...我如何知道场中的哪个服务器将事件发送到 ElasticSearch?
一种选择是使用 .net 获取服务器名称并将其作为列发送,这需要我将服务器名称添加到每个事件。这似乎有点过分,但它可以完成工作。我希望除了必须将其实际编码到事件之外还有更简单的方法。
感谢您的宝贵时间,
格雷格
编辑 4 - Karol 帮我搞定了这个工作示例,运行,谢谢 KAROL!正在尝试添加创建自定义过滤器作为扩展:
- 我们需要为自定义过滤器工厂
创建一个新的class
- 然后我们需要创建第二个新的 class 并让它实现 IFilter 接口。为了从工厂传递健康监视器,我们使用了构造函数。
- 使用Evaluate函数作为我们的区域来添加数据(eventData.AddPayloadProperty)
然后参考我们EventFlowConfig.json.
扩展区的自定义过滤器
一种。类别是 filterFactory
b。类型是您的 class 的名称。
c。限定的类型名称在“type-name, assembly-name”中。例如(假设您将过滤器工厂命名为“MyCustomFilterFactory”):“My.Application.Logging.MyCustomFilterFactory, My.Application.Assembly.WhereCustomFilterAndItsFactoreLive”
在 C# 代码所在的位置添加对 Microsoft.Extensions.Configuration 的引用。
然后您可以在任何需要的地方引用您的自定义过滤器,这里我们使用的是全局过滤器
工作示例:
class CustomGlobalFilter : IFilter
{
private IHealthReporter HealthReporter;
private string MachineName;
public CustomGlobalFilter(string ServerName, IHealthReporter HealthReporter)
{
MachineName = ServerName;
this.HealthReporter = HealthReporter;
}
FilterResult IFilter.Evaluate(EventData eventData)
{
eventData.AddPayloadProperty("ServerName", MachineName, HealthReporter, "CustomGlobalFilter");
return FilterResult.KeepEvent;
}
}
class CustomGlobalFilterFactory : IPipelineItemFactory<CustomGlobalFilter>
{
public CustomGlobalFilter CreateItem(IConfiguration configuration, IHealthReporter healthReporter)
{
CustomGlobalFilter GlobalFilter = new CustomGlobalFilter(System.Environment.MachineName, healthReporter);
return GlobalFilter;
}
}
然后在 EventFlow 配置中:
"filters": [
{
"type": "drop",
"include": "Level == Verbose"
},
{
"type": "CustomGlobalFilter"
}
],
...
"extensions": [
{
"category": "filterFactory",
"type": "CustomGlobalFilter",
"qualifiedTypeName": "My.Company.Presentation.App.CustomGlobalFilter, My.Company.Presentation.App"
}
它不是今天 EventFlow 内置的东西,但至少有几个选项:
- Use EventFlow extensibility 添加自定义过滤器,将这些属性添加到它“看到”的每个事件。
- 在许多日志记录库中,有一个“初始化器”或“丰富”的概念,可用于自动添加上下文属性。例如 in Serilog(EventFlow 原生支持)
我假设这是一个很常见的问题,我们如何轻松地将服务器信息添加到 EventFlow 事件?
我的情况是,我正在部署一个应用程序,该应用程序将具有自己的特定环境 EventFlowConfig.json,但场中的每台服务器都将获得相同的 json 文件。那么...我如何知道场中的哪个服务器将事件发送到 ElasticSearch?
一种选择是使用 .net 获取服务器名称并将其作为列发送,这需要我将服务器名称添加到每个事件。这似乎有点过分,但它可以完成工作。我希望除了必须将其实际编码到事件之外还有更简单的方法。
感谢您的宝贵时间, 格雷格
编辑 4 - Karol 帮我搞定了这个工作示例,运行,谢谢 KAROL!正在尝试添加创建自定义过滤器作为扩展:
- 我们需要为自定义过滤器工厂 创建一个新的class
- 然后我们需要创建第二个新的 class 并让它实现 IFilter 接口。为了从工厂传递健康监视器,我们使用了构造函数。
- 使用Evaluate函数作为我们的区域来添加数据(eventData.AddPayloadProperty)
然后参考我们EventFlowConfig.json.
扩展区的自定义过滤器 一种。类别是 filterFactoryb。类型是您的 class 的名称。
c。限定的类型名称在“type-name, assembly-name”中。例如(假设您将过滤器工厂命名为“MyCustomFilterFactory”):“My.Application.Logging.MyCustomFilterFactory, My.Application.Assembly.WhereCustomFilterAndItsFactoreLive”
在 C# 代码所在的位置添加对 Microsoft.Extensions.Configuration 的引用。
然后您可以在任何需要的地方引用您的自定义过滤器,这里我们使用的是全局过滤器
工作示例:
class CustomGlobalFilter : IFilter
{
private IHealthReporter HealthReporter;
private string MachineName;
public CustomGlobalFilter(string ServerName, IHealthReporter HealthReporter)
{
MachineName = ServerName;
this.HealthReporter = HealthReporter;
}
FilterResult IFilter.Evaluate(EventData eventData)
{
eventData.AddPayloadProperty("ServerName", MachineName, HealthReporter, "CustomGlobalFilter");
return FilterResult.KeepEvent;
}
}
class CustomGlobalFilterFactory : IPipelineItemFactory<CustomGlobalFilter>
{
public CustomGlobalFilter CreateItem(IConfiguration configuration, IHealthReporter healthReporter)
{
CustomGlobalFilter GlobalFilter = new CustomGlobalFilter(System.Environment.MachineName, healthReporter);
return GlobalFilter;
}
}
然后在 EventFlow 配置中:
"filters": [
{
"type": "drop",
"include": "Level == Verbose"
},
{
"type": "CustomGlobalFilter"
}
],
...
"extensions": [
{
"category": "filterFactory",
"type": "CustomGlobalFilter",
"qualifiedTypeName": "My.Company.Presentation.App.CustomGlobalFilter, My.Company.Presentation.App"
}
它不是今天 EventFlow 内置的东西,但至少有几个选项:
- Use EventFlow extensibility 添加自定义过滤器,将这些属性添加到它“看到”的每个事件。
- 在许多日志记录库中,有一个“初始化器”或“丰富”的概念,可用于自动添加上下文属性。例如 in Serilog(EventFlow 原生支持)