首页 > 编程知识 正文

show logging命令详解,日志采集框架

时间:2023-05-06 08:03:45 阅读:171738 作者:2639

原文地址: https://www.cn blogs.com/zh 7791/p/12620439.html

NLog是基于. NET平台创建的类库,可以使用NLog在APP应用程序中添加非常高级的跟踪调试代码。

nog是一个简单灵活的. NET日志库。 通过使用NLog,可以输出任何. NET语言的上下文(contextual information )调试诊断信息,根据自己的喜好设置其表示样式,然后将其发送到一个或多个目标。

如果有很多讨厌的字,请单击跳转视频的地址

在quickinstall#包管理器控制台中使用GUI或以下命令:

安装日志

安装软件包nlog

安装Nlog.Config

Install-Package Nlog.Config

打开quickconfiguration#目录中的Nlog.Config文件时,请注意XML文件中有详细说明。 在rules区域中可以添加用户定义的路由规则。 在targets中,设置几个输出位置,例如

? XML version=' 1.0 ' encoding=' utf-8 '? nlog xmlns=' http://www.nlog-project.org/schemas/nlog.xsd ' xmlns 3360 xsi=' http://www.w3.org/2001/XML方案-实例' xsi :方案位置=' http://www.nlog-project.org/schemas/nlog.xsd nlog.xsd ' autoreload=' true ' throw exceptions=' false ' internal log level=' off ' internal log file=' c 3360 addsomevariables 3359 github.com/nlog/nlog/wiki/configuration-file # variables-variablename='-see https://github.sed configuration-fileforinformationoncustomizingloggingrulesandoutputs.--ta ATA-addyourtargetsheresee https://github.com/ncom targetsforpossibletargets.see https://github.com/nlog/nlog-writeeventstoafilewiththedateinthefilename.target xsi 3360 type=' file ' name=' f ' filename=' $ { basedir }/loget -- add your logging rules here --! - writealleventswithminimallevelofdebug (so debug,Info,Warn,Error and Fatal,but not Trace ) to'f'loggername='* '

临时删除注释说明代码,恢复为最简洁的XML格式,如下所示。

? XML version=' 1.0 ' encoding=' utf-8 '? nlog xmlns=' http://www.nlog-project.org/schemas/nlog.xsd ' xmlns 3360 xsi=' http://www.w3.org/2001/xmls chemes 位于根目录的" logs "文件夹中,该名称在每天的获取时间生成一次log文件," layout: "选项是生成的格式--- target xsi 3360 type=' file ' name "

fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" /> </targets> <rules> <!--设定了一个Debug得路由, 最终指向了一个f名称得目标 --> <logger name="*" minlevel="Debug" writeTo="f" /> </rules></nlog> 快速使用#

1.创建Nlog实例

private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();

2.使用Debug进行输出
由于在Nlog.Config当中, 我们已经添加了Debug的最终输出目标, 所以我们尝试输出Debug的内容:

class Program { private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger(); static void Main(string[] args) { Logger.Debug("我出现了意外!"); Console.ReadKey(); } }

运行完成之后,可以在当前的输出目录中, 发生已经生成了一个logs的文件夹,并且生成了当前计算器日期的log文件 (这个规则在Nolog.Config当中可以进行配置), 如图所示:

详解配置#

关于rules中, 我们可以添加多种路由规则, 并且指向多个目标, 如下所示:

添加支持Console输出#

1.在rules中添加Info, writeTo指向一个Console的目标

<targets> <!--<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" />--> <target xsi:type="Console" name="console"/> </targets> <rules> <!--<logger name="*" minlevel="Debug" writeTo="f" />--> <logger name="*" minlevel="Info" writeTo="console"/> </rules>

2.使用Info输出

输出至CSV文件#

1.在rules中添加一个新的路由, 以支持csv文件, 并且添加一个目标, 输出至csv文件, column可以用于指定每列生成的数据内容格式

<targets> <target name="csv" xsi:type="File" fileName="${basedir}/file.csv"> <layout xsi:type="CSVLayout"> <column name="time" layout="${longdate}" /> <column name="message" layout="${message}" /> <column name="logger" layout="${logger}"/> <column name="level" layout="${level}"/> </layout> </target> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="csv" /> </rules>

最终调用Debug("xxxx"), 输出的效果如下:

配置日志大小#

Nlog允许用户配置单个文件大小, 放置在内容过长效率过慢,配置了大小之后, Nlog会自动创建一个新的文件副本,插入新的日志输出。

maxArchiveFiles: 允许生成的副本文件最大数量archiveAboveSize: 允许单个文件得最大容量archiveEvery: 按天生成layout: 当前得内容布局格式fileName: 包含完整得生成文件得路径喝文件名<targets> <target name="file" xsi:type="File" layout="${longdate} ${logger} ${message}${exception:format=ToString}" fileName="${basedir}/logs/logfile.txt" maxArchiveFiles="5" archiveAboveSize="10240" archiveEvery="Day" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> </rules> 配置日志分级#

单个文件目标可用于一次写入多个文件。以下配置将导致每个日志级别的日志条目被写入一个单独的文件,支持以下格式:
Trace.log
Debug.log
Info.log
Warn.log
Error.log
Fatal.log
只需要在Nlog.Config中配置以下内容即可:

<?xml version="1.0" ?><nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="file" xsi:type="File" layout="${longdate} ${logger} ${message}${exception:format=ToString}" fileName="${basedir}/${level}.log" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> </rules></nlog> 配置生成规则#

只需要将filename中编写得固定名称修改程 ${shortdate} 即可

<?xml version="1.0" ?><nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="file" xsi:type="File" layout="${longdate} ${logger} ${message}${exception:format=ToString}" fileName="${basedir}/${shortdate}.log" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> </rules></nlog> 日志过滤器#

可以在路由当中, 为每个路由配置自定义得日志过滤器fliter, 如下所示, 演示了使用各种表达式来配置过滤器:

<rules> <logger name="*" writeTo="file"> <filters> <when condition="length('${message}') > 100" action="Ignore" /> <when condition="equals('${logger}','MyApps.SomeClass')" action="Ignore" /> <when condition="(level >= LogLevel.Debug and contains('${message}','PleaseDontLogThis')) or level==LogLevel.Warn" action="Ignore" /> <when condition="not starts-with('${message}','PleaseLogThis')" action="Ignore" /> </filters> </logger></rules> 条件语言#

过滤器表达式以特殊的迷你语言编写。该语言包括:
关系运算符:==,!=,<,<=,>=和>
注意:一些预先定义的XML字符可能需要转义。例如,如果尝试使用'<'字符,则XML解析器会将其解释为开始标记,这会导致配置文件中的错误。而是<在这种情况下使用转义版本的<<(())。
布尔运算符:and,or,not
始终被视为布局的字符串文字- ${somerenderer}
布尔文字- true和false
数值文字-例如12345(整数文字)和12345.678(浮点文字)
日志级别文字- LogLevel.Trace,LogLevel.Debug,...LogLevel.Fatal
预定义的关键字来访问最常用的日志事件属性- level,message和logger
花括号-一起覆盖默认优先级和分组表达式
条件函数-执行string和object测试
单引号应与另一个单引号转义。

条件函数#

以下条件功能可用:
contains(s1,s2)确定第二个字符串是否是第一个的子字符串。返回:true当第二个字符串是第一个字符串的子字符串时,false否则返回。
ends-with(s1,s2)确定第二个字符串是否是第一个字符串的后缀。返回:true当第二个字符串是第一个字符串的前缀时,false否则返回。
equals(o1,o2)比较两个对象是否相等。返回:true当两个对象相等时,false否则返回。
length(s) 返回字符串的长度。
starts-with(s1,s2)确定第二个字符串是否是第一个字符串的前缀。返回:true当第二个字符串是第一个字符串的前缀时,false否则返回。
regex-matches(input, pattern, options)在NLog 4.5中引入。指示正则表达式是否pattern在指定的input字符串中找到匹配项。options是一个可选的逗号分隔的RegexOptions枚举值列表。
返回:true当在输入字符串中找到匹配项时,false否则返回。
范例:regex-matches('${message}', '^foo$', 'ignorecase,singleline')

关于更多内容#

访问: https://github.com/NLog/NLog , 查看更多内容

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。