Nlog

通过Nlog登录到insights

要配置您的应用程序通过Nlog登录到InsightOps,您需要执行以下任务:

  • 创建一个InsightOps帐户。
  • 创建主机和日志以接收日志数据。
  • 将插件库和适当的InsightOps Appender库添加到应用程序中。
  • 在应用程序中配置插件和InsightOps appender。
  • 从应用程序发送日志消息。
  • 下面将进一步详细概述这些步骤。

设置

将NLog和InsightOps Target库添加到应用程序中最简单的方法是安装logentries.nlogNuget包.这个包将安装InsightOps Target库,并将自动安装NLog包作为依赖项。

配置NLog和insightsappender

一般的NLog配置超出了本自述的范围。配置NLog的详细操作请参见NLog手册的“配置”章节。

NLog允许将日志消息发送到多个目的地。在NLog术语中,这种输出目的地称为目标。目标必须是NLog.Targets.Target类的子类。InsightOps插件库提供了这样一个目标组件,专门设计用于以高效的方式向InsightOps发送日志消息。

InsightOps目标是按照正常的方式使用元素配置并添加到你的NLog配置中:

         
1.

InsightOps目标有两种不同配置的设置:

  • 日志设置
  • InsightOps凭证

NLog日志设置

属性的子元素指定日志记录设置,以确定目标如何操作 元素。洞察目标器支持以下配置设置:

  • 级别:应包括的最低NLog日志记录级别。日志级别低于此级别的所有日志消息都将被过滤掉,而不会发送到InsightOps。
  • Debug:设置为true将内部调试消息发送到Nlog内部日志记录器。
  • UseSsl:设置为true,使用SSL向InsightOps发送数据(更多信息见下面)。
  • 布局:用于在将日志消息发送到日志条目之前格式化日志消息的布局。
         
1.
< configSections >
2.
<节name = " nlog " type = " NLog.Config。ConfigSectionHandler, NLog " / >
3.
< / configSections >
4.
5.
< >扩展
6.
<添加组装= " R7Insight。NLog " / >
7.
> < /扩展
8.
<目标>
9
10
layout=“${date:format=ddd-MMM-dd}${time:format=HH:mm:ss}${date:format=zzz-yyyy}${logger}:${LEVEL},${message}”/>
11
12
<规定>
13
. txt
14
> < /规则
15
< / nlog >

NLog InsightOps凭证

洞察凭据确定发送到哪个主机并记录日志消息。以下设置构成了insighttops凭据:

令牌:要向其发送消息的日志的唯一令牌GUID。这在使用较新的基于令牌的日志记录时适用。AccountKey和Location:要向其发送消息的帐户密钥和位置。这在使用较旧的HTTP PUT日志记录时适用(有关更多信息,请参阅下文)。与日志记录设置(通常为给定应用程序配置一次)不同,InsightOps凭据通常根据应用程序的环境或实例而不同。例如,您的应用程序可能同时在测试环境和生产环境中运行,您很可能希望这两个环境有单独的日志记录目标。

因此,与配置设置相比,可以更灵活地指定insight tops凭据。你有三个选择:

将凭据指定为元素的子元素(如果不需要额外的灵活性)。属性中的设置指定凭据 元素在你的App.config och Web。配置文件。在云服务项目中指定证书为Windows Azure角色配置设置(仅当在Windows Azure中作为云服务运行应用程序时适用)。InsightOps目标在内部使用CloudConfigurationManager类来读取凭据值。这个类按照以下顺序查找每个证书值:

如果该值作为Windows Azure角色配置设置存在,则使用该值。属性中的设置,则不存在该值 元素,则使用该值。否则,如果该值作为元素的配置子元素存在,则使用该值。以下是如何在元素中指定凭据的示例:

         
1.

下面是一个如何在中指定凭据的示例 元素。配置文件:

         
1.
< appSettings >
2.
<添加关键= "洞察力。令牌“价值= " bb61600f f766 - 451 e - b55f - 9204 f536a79f " / >
3.

下面是一个如何将凭证指定为Windows Azure角色配置设置的示例:

         
1.
.
2.
<角色名称= " MyRole " >
3.
<实例数= " 2 " / >
4.
< ConfigurationSettings >
5.
<设置name = "洞察力。令牌“价值= " bb61600f f766 - 451 e - b55f - 9204 f536a79f " / >
6.
< / ConfigurationSettings >
7.
8.
< / ServiceConfiguration >

使用NLog在Web应用程序中记录上下文信息

在web应用程序中,使用NLog的内置功能为每个日志消息记录额外的上下文信息通常是有帮助的。它与InsightOps的日志消息索引器结合使用时工作得特别好,该索引器可以识别传入日志消息中的任何键值对,并为这些键值对建立索引,以进行快速搜索和检索。

下面是一个示例,说明如何将额外的特定于web的上下文日志信息以InsightOps解析器能够识别和索引的格式添加到InsightOps appender的布局中:

         
1.
<目标名称=“logentries”类型=“洞察力”
2.
${date:format=ddd MMM dd} ${time:format=HH:mm:ss} ${date:format=zzz yyyy} ${logger} ${LEVEL} ${message}${newline}SessionId='${aspnet-sessionid}';用户名= " $ {aspnet-user-identity} ';${换行符}" / >

基于符号的日志

我们推荐的向insighttops发送消息的方法是通过令牌TCP端口10000。要使用此方法,请选择令牌TCP作为源类型在InsightOps UI中创建一个新日志,然后将打印在日志旁边的令牌粘贴到Logentries的值中。令牌凭证设置。

使用NLog通过SSL/TLS发送日志数据

通过在appender定义中将useSsl日志设置为true, insighttops appender支持使用上述两种日志记录方法通过SSL/TLS发送日志数据。这样更安全,但可能对性能有影响。

使用NLog从应用程序发送日志消息

安装和配置完成后,您就可以向InsightOps发送日志数据了。

在你想要登录的每个类中,如果还没有的话,在顶部添加以下using指令:

         
1.
使用NLog;

然后在类级别创建一个记录器对象:

private static readonly Logger m_logger = LogManager.getCurrentClassLogger();这将创建一个与当前类同名的日志记录器,它将根据您的代码命名空间层次结构组织NLog配置层次结构。这样既可以清晰地读取日志,又可以方便地为代码的不同区域配置不同的日志级别。

在那个类的代码中,你可以正常使用NLog日志,它会记录到InsightOps。

例子:

         
1.
loggerLe。Info(“这是一个测试消息”);
2.
loggerLe.Info(“这是另一条测试消息”);
3.
String x = System.Console.ReadLine();

完整的代码示例:

         
1.
使用NLog;
2.
使用系统;
3.
使用System.Collections.Generic;
4.
使用来;
5.
使用text;
6.
使用System.Threading.Tasks;
7.
名称空间logentrieslog4netsamplepp
8.
{
9
班级计划
10
{
11
private static readonly ILog loggerLe=LogManager.GetLogger(typeof(Program));
12
13
static void Main(string[] args)
14
{
15
loggerLe。Info(“这是一个测试消息”);
16
loggerLe.Info(“这是另一条测试消息”);
17
String x = System.Console.ReadLine();
18
}
19
}
20.
}

故障排除NLog

默认情况下,InsightOps目标将自己的调试消息记录到NLog的内部记录器。检查这些调试消息有助于找出InsightOps日志记录无法按预期工作的原因。

关闭NLog的日志

InsightOps目标保持一个日志消息的内部队列,并使用一个后台线程与InsightOps系统通信,该线程不断地从这个队列发送消息。因此,当应用程序关闭时,一些日志消息可能仍然留在队列中,在应用程序域关闭之前没有时间发送到InsightOps。

为了解决这个潜在的问题,考虑将下面的代码添加到应用程序中,这将暂时阻止InsiTopAppEnter完成队列中的所有消息的日志记录。AreAllQueuesEmpty()阻塞指定的时间,然后返回true或false,具体取决于在方法返回之前队列是否有时间变为空。

         
1.
公共空间Application_End ()
2.
{
3.
//这将给LE后台线程一些时间来完成向InsightOps发送消息。
4.
var num等待= 3;
5.
而(!LogentriesCore.Net.AsyncLogger.AreallQueuesPty(TimeSpan.FromSeconds(5))&&numWaits>0)
6.
numWaits——;
7.
}