- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在寻求使用ELK堆栈更好地集中,组织和搜索日志。当前,我们正在登录数据库表,并且我们有一个EventLog
POCO,它捕获填充这些行所需的字段。我们将数据输入到Elasticsearch的第一步是简单地通过Serilog记录事件,如下所示:
EventLog eventLog = ...;
log.ForContext("EventLog", eventLog, true).Write(eventLog.EventMessage);
{
"_index": "logstash-2019.03.14",
"_type": "logevent",
"_id": "p_amfGkBaphWeJXGjjSW",
"_version": 1,
"_score": null,
"_source": {
"@timestamp": "2019-03-14T09:41:21.6924251-05:00",
"level": "Information",
"messageTemplate": "blah",
"message": "blah",
"fields": {
"EventLog": {
"_typeTag": "EventLog",
"EventMessage": "blah",
"EventId": 3112,
...
ElasticClient.Search<T>
似乎是我们需要的,我们不确定
T
是什么,也不知道NEST如何解释搜索条件或返回的数据。
client.Search<EventLog>(); // returns zero results
client.Search<Serilog.Events.LogEvent>(); // throws: Error converting string to Serilog.Events.MessageTemplate
client.Search<EventLog>(s => s.Type("logevent")); // returns results!, but the EventLog objects are all empty (properties all have default values)
client.Search<Object>(s => s.Type("logevent")); // returns the raw JSON source of each log entry
Project
类型,但是我们需要做些什么才能能够提取和查询我们使用Serilog的
ForContext
添加到日志中的自定义结构?
private class DummyFields
{
public EventLog EventLog { get; set; }
}
private class Dummy
{
public DummyFields Fields { get; set; }
}
Dummy
确实确实使我们能够访问我们的内部结构,但是似乎应该有一个更好的方法来执行此操作...
client.Search<Dummy>(s => s
.AllTypes()
.Query(q => q
.Match(t => t
.Field(f => f.Message).Query("blah"); // returns some results
client.Search<Dummy>(s => s
.AllTypes()
.Query(q => q
.Match(t => t
.Field(f => f.Fields.EventLog.EventMessage).Query("blah"); // returns zero results
client.Search<Dummy>(s => s
.AllTypes()
.Query(q => q
.Match(t => t
.Field(f => new Field("fields.EventLog.EventMessage")).Query("blah");
最佳答案
发送到Elasticsearch的原始JSON文档包含在搜索响应中每个匹配的_source
属性内
{
"@timestamp": "2019-03-14T09:41:21.6924251-05:00",
"level": "Information",
"messageTemplate": "blah",
"message": "blah",
"fields": {
"EventLog": {
"_typeTag": "EventLog",
"EventLog"
在JSON路径
"fields.EventLog"
处,因此,任何映射到此且将JSON反序列化的CLR POCO都必须符合此结构,就像上面的
Dummy
类型所做的。
"EventLog"
序列化为_source
中的整个JSON文档。然后,您可以将其直接映射到您的"EventLog"
类型。 "fields.EventLog"
反序列化为给定的EventLog
POCO类型。您可以使用 JsonNetSerializer
做到这一点,并为JsonConverter
类型实现自定义EventLog
。但是,这样做有两个复杂之处:首先,这只能用作读取模型,因为当希望再次进行序列化时,生成的JSON将仅是EventLog
的JSON,其次,与NEST使用的内部序列化程序相比,使用JsonNetSerializer
具有性能开销。 关于.net - 我们如何使用ElasticClient(NEST)提取登录到Elasticsearch的Serilog .ForContext()对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55170126/
我在我的项目(MVC/web api 等)中使用 serilog & SEQ 和 Autofac (DI)。虽然它工作正常 但不确定这是正确的方法。 我有几个问题。请帮忙 Q1) 如何让 Logger
我是 Serilog 的新手,我很难弄清楚如何使用上下文功能。当我运行输出文件下面的代码时,不包含报告 ID。任何想法我缺少什么? var logger = new LoggerConfigurati
我正在尝试通过执行以下操作来记录传递给 Controller 的模型: _log .ForContext("Id", "XXXXXX-XXXX-XXXX-X
我正在尝试向 Serilog 添加动态自定义属性,但我不确定如何按照我想要的方式进行。这是代码: if (data.Exception != null) {
我们正在寻求使用ELK堆栈更好地集中,组织和搜索日志。当前,我们正在登录数据库表,并且我们有一个EventLog POCO,它捕获填充这些行所需的字段。我们将数据输入到Elasticsearch的第一
我是 Serilog 的新手,我很难只在需要时显示类名,而不必将 {SourceContext:l} 添加到每个日志消息。我知道我可以将代码编写为: Log.ForContext().Verbose(
我遇到了一个很奇怪的问题。一切似乎都正常工作,但是在提交输入时(我在使用 元素时尝试了表单提交事件和 keyop.enter 事件,我在我的 JS 控制台中收到以下错误并且无法弄清楚。 控制台报错如
我在尝试使用 Mock 对信号器组件进行单元测试时遇到问题。这就是问题发生的地方 _logger.LogInformation($"Registering a Station with id: {I
使用 Serilog和F#如何使用.ForContext有功能吗?它似乎只接受类型类: type A()= log = Serilog.Log.ForContext() // ✅ let f _
Serilog 允许创建上下文感知记录器: Log.ForContext() 我想以 T 的方式向 SimpleInjector 注册 Serilog是消费者的类型,即它被注入(inject)到哪个类
我是一名优秀的程序员,十分优秀!