问题标签 [serilog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1384 浏览

c# - 是否可以从 Serilog 的输出中删除 _typeTag?

我正在使用 Serilog 通过 Logstash 将结构化日志数据写入 Elasticsearch。当像这样在日志消息中写入对象时

附加属性 _typeTag 包含在输出的 JSON 中。是否可以排除此属性?

0 投票
1 回答
432 浏览

c# - Serilog RavenDb 接收器在 asp.net 5 应用程序中不起作用

我正在查看 serilog 并运行一些测试。到目前为止,它可以正常写入控制台或文件。但是,我没有任何运气让它与 RavenDb 接收器一起工作。我试图让它在 asp.net 5 应用程序中工作。我审查了以下文章:

http://nblumhardt.com/2015/05/diagnostic-logging-in-dnx-asp-net-5/ http://nblumhardt.com/2013/06/serilog-and-ravendb/

我从一个空的应用程序开始,并在 project.json 中添加了以下依赖项。

我还删除了 dnxcore。

然后我在startup.cs中添加了以下代码:

一切都很好地记录到文件和控制台,并创建了日志数据库,但没有日志条目存储在 RavenDb 中。

我尝试了各种日志级别。我尝试减少批量大小。我怀疑这与文档存储的生命周期有关,所以我在ConfigureServices方法中添加了以下内容。

然后我将记录器配置代码移动到Configure方法中并使用了 DI 实例,但这也不起作用。我可以使用相同的方式将其他对象存储在 RavenDb 中DocumentStore

我错过了配置设置吗?

0 投票
1 回答
1558 浏览

azure - Serilog Seq Sink 并不总是捕获事件

我在 Azure 实例(Windows Server 2012 R2 Datacenter)上运行 Seq,并从本地工作站上运行的控制台应用程序使用 Serilog 进行日志记录。我配置了 3 个接收器 - 文件、控制台和序列。我也在 dnxcore50 上运行(以防你认为我的设置不够狡猾)。我所有的事件都显示在控制台和文件中 100% 的时间。Seq 仅在 5 次或更多运行中捕获大约 1 个事件,也就是说,它将捕获运行的所有事件或不捕获任何事件。我正在使用免费的单用户许可证来评估 Seq,但我没有发现任何迹象表明存在任何会导致这种行为的限制。

我已经在记录器上设置了 SelfLog.Out,但是除了我添加的测试行之外什么都没有记录,以确保自记录至少可以写入指定的文件。

有什么建议么?这是否只是处于最前沿,使用预发布所有内容的副作用(尽管在这种情况下,我希望事情会持续失败)?

0 投票
1 回答
467 浏览

c# - Serilog:是时候生活在 mongoDB Capped Collection 中了?

Serilog 如何实施封顶收集期限?请参阅此代码:

因为根据 MongoDB 文档,您不能使用其“TTL 功能”和上限集合来存储文档。所以我假设:库以某种方式在其代码中跟踪这一点,但我想知道如何:以及它是否足够快。

MongoDB Capped Collection: https://docs.mongodb.org/manual/core/capped-collections/ GitHub MongoDB Sink (target) for Serilog: https://github.com/serilog/serilog-sinks-mongodb

也许用普通的集合和 TTL 文档编写我们自己的 Sink 甚至会更容易。

0 投票
1 回答
716 浏览

logging - Logentries + Xamarin = 如何?

主要问题是:如何将 Logentries 集成到基于 Xamarin 的移动应用程序中?考虑到以下两种方式:Serilog 和 log4net。

Logentries 原生支持Android、iOS、WP,但在使用 Xamarin 代理这些 API 时不支持。Serilog是围绕 Logentries API 的一个优雅的 C# 包装器,但是在同一个项目中安装所有需要的组件以及 Xamarin 的组件时出现问题。Visual Studio 被用作 IDE,NuGet 被用作包管理器。我认为应该使用 NuGet 安装的包是SerilogSerilog.MobileSerilog.Sinks.Logentries。使用 Xamarin 创建 Android 应用程序时,正在使用 Mono.Android 模块。Serilog 与 Mono.Android 完美共存,但 Serilog.Mobile 和 Serilog.Sinks.Logentries 不能:

错误:无法安装包“ Serilog.Sinks.Logentries 1.5.8”。您正在尝试将此包安装到以“ Xamarin.iOS ,Version=v1.0”为目标的项目中,但该包不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请联系包作者。

Serilog.Mobile 的错误消息是相同的。

使用 Xamarin.iOS 时,唯一不兼容的模块恰好是 Serilog.Sinks.Logentries:

错误:无法安装包“ Serilog.Sinks.Logentries 1.5.8”。您正在尝试将此包安装到以“ MonoAndroid ,Version=v6.0”为目标的项目中,但该包不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请联系包作者。

看到有一个Xamarin Serilog "sink"。由创建 Logentries 的同一个人编写。在我看来,它只是移植了 Serilog 库,并为 Android 的 Log 类和 iOS 的 NSLog 提供了便利的记录器:

所以第一个问题是,如果 Serilog 即将用于基于 Xamarin 的应用程序,那怎么会发生呢?

log4net 是Logentries C# 端口的另一个选项,但可能又不是 Xamarin,而是桌面应用程序。只是调查一下,显然有一些适用于 iOS 的端口

如果您可以向我推荐正确的方法来使用 Logentries 与 Xamarin,那就太好了。

0 投票
1 回答
4468 浏览

c# - Serilog:记录不同类型的日志事件

我的 API 被不同类型的消费者访问。有外部应用程序,以及通过 Web 界面的用户。

我将尝试用一个例子来解释:所以在一个方法调用中,我想记录谁或什么访问了它。

如果是外部应用程序,我想记录这样的内容(使用模板):

如果是用户触发的操作,我想记录如下内容:

两种类型的方法调用者都可以从 访问Thread.CurrentPrincipal.Identity,但每种都实现了不同类型的身份,具有不同的自定义属性。

我的代码看起来像:

如果我的记录器配置如下:

如果由外部应用程序(线程标识)触发调用,它永远不会显示 Key 和 RequestId。

我添加MyEnricher到记录器中,类似于:

据我从在线文档和示例中了解到,日志模板仅在配置记录器时设置,在实际创建之前。我无法通过 LogEvent 访问和修改丰富器中的模板,因为它是只读的(只有 getter)。

我知道可能的消息格式,但这不是我在这种特殊情况下要寻找的。

对于外部应用程序访问,我希望在日志中看到的最终结果类似于:

2016 年 1 月 17 日 10:11:42.524 [API] 10:11:40 [信息] (RequestId: 123 | Key: XXX-1 | AppVersion:1.2.1) DoSomething 调用

并为用户登录时:

2016 年 1 月 17 日 11:12:42.524 [WEB] 11:12:40 [信息](全名:匿名 | 组织:MyOrg | AppVersion:1.2.1)DoSomething 调用

我的问题是:如何(如果可能)记录(并在日志中查看)具有不同属性的不同类型的事件以登录模板?是否可以在运行时动态操作模板?我不希望拥有来自两种或许多其他可能事件类型的所有可能标记的模板,并且它们的属性定义在一个地方(在一种情况下使它们中的许多为空白)。

0 投票
1 回答
870 浏览

c# - 在 Serilog 中解构时忽略空值

在 Serilog 中,是否可以在属性值为空时忽略属性?

我试过添加 DataMember 属性,但这些似乎被忽略了:

进一步查看源代码我注意到有一个AttributedDestructuringPolicy但这似乎控制渲染属性值而不是省略属性。

0 投票
1 回答
1713 浏览

c# - Is it possible to only display SourceContext in Serilog if ForContext has been defined

I am new to Serilog and I am struggling with displaying the class name only when required without having to add {SourceContext:l}to each log message. I am aware I can just write the code as:

I have the logger being setup as below:

I am hoping to only have the class name displayed when the class has been specified as seen here.

And not displayed if the log is created like.

However on the above example it will print a log out in the format of '{SourceContext} message' instead of just 'message' which is not what I want.

0 投票
1 回答
5047 浏览

serilog - Serilog 文件/RollingFile 接收器和缓冲

看起来Serilog文件/滚动文件接收器在每次记录器调用后刷新流。

这不是基本性能受到打击吗?例如,Nlog 有某种 AsyncWrapper用于排队日志事件并使用后台线程批量写入它们。

如果我想在使用文件接收器时最小化延迟,有什么解决方案?

0 投票
0 回答
386 浏览

c# - 根据 Serilog 的 xml 配置中的日志记录级别定义具有不同 outputTemplates 的多个接收器

有没有办法在 serilog 的 XML 配置中定义多个接收器,以允许 outputTemplate 根据日志级别进行更改?

我目前有:

但是,希望调试级别日志不包括 SourceContext 字符串,如下所示:

我知道您可以设置,restrictedToMinimumLevel: LogEventLevel.Verbose但我不确定如何在 XML 中执行此操作。