关于c#:C日志使用

15次阅读

共计 2758 个字符,预计需要花费 7 分钟才能阅读完成。

本文参考链接

日志框架

框架抉择:NLog

装置办法,Nuget 命令行:Install-Package NLog

罕用规定

  1. 尽量不要在循环中打印日志。
  2. 应输入谬误的堆栈信息:e.Message仅为异样形容,e.ToString()能够打印异样堆栈。
  3. 抛异样的中央不要打印日志,因为个别捕捉异样的中央会打印,屡次打印造成反复输入。
  4. 日志级别的应用要精确。
  5. 要害信息能够加显眼的符号,如程序启动时:======= app start =======,不便疾速定位信息。
  6. 不要应用Console.WriteLine(),效率低。
  7. 日志的放弃工夫应在 15 天以上重要日志适当缩短。
  8. 配置日志框架输入格局的内容不要蕴含类名、函数名、行号等信息,这种行为耗费微小。
  9. 审慎记录日志,防止输入大量有效日志、信息不全的日志。
  10. 日志函数的参数不要应用拼接字符串,应用格式化字符串。

应该打印什么日志

  1. 调试日志:开发阶段应用大量调试日志,不便调试,上线后禁止。
  2. 运行日志:记录程序的运行,该局部日志应能体现程序的运行流程。
  3. 状态日志:记录程序的状态,用于数据展现。

NLog 性能简介

NLog 应用
  1. 应用独自文件进行 NLog 配置,文件名命名为 NLog.config
  2. 配置autoReload="true":配置批改是否主动加载。
  3. 配置throwExceptions="false":日志出现异常时是否须要抛出异样,若配置为 true 日志记录异样时因为没有捕捉异样,会导致程序挂掉。
  4. 配置internalLogLevel=Debug:示意 nlog 日志的执行日志记录等级,开发过程中配置为 Debug,上线后配置为 Info。
  5. 配置internalLogFile:示意 nlog 日志的执行日志记录的地位。通过./XXXX 的形式能够配置到程序的绝对目录。日志一律保留到./Logs/ 日期 / 过程名.log
  6. 日志级别应用范畴规定为 Debug-Error,只容许应用这四个级别的日志。开发过程中将日志等级设为 Debug,上线后设置为 Info。
  7. 配置 targets 的aasync=true:异步保留日志,从而避免日志影响业务性能。
日志等级
Level FirstCharacter Ordinal
Trace T 0
Debug D 1
Info I 2
Warn W 3
Error E 4
Fatal F 5
Off O 6

通过 NLog.LogManager.GetLogger 咱们能够获取一个日志对象示例。传入的参数为日志实例名,咱们能够在日志名中通过 ${logger}参数输入日志实例名。能够将不同的日志保留到不同的文件。

targets 配置

NLog 通过 target 配置日志输出的指标。能够通过配置多个 target 将日志输出到多个目录,多个指标(文件,网络,数据库等)。如通过设置 2 个指标, 将 info 和 error 日志离开保留。其中很多参数是共用的,咱们能够设置一个默认参数 default-target-parameters,缩小配置文件节点。

xsi:type:输出类型:

  • ColoredConsole : 应用可自定义的色彩将日志音讯写入控制台。
  • Console – 将日志音讯写入控制台。
  • Debug – 模仿指标 - 用于测试。
  • File – 将日志音讯写入一个或多个文件。
  • Mail – 应用 smtp 协定或拾取文件夹通过电子邮件发送日志邮件。
  • Null – 抛弃日志音讯。次要用于调试和基准测试。

name:指标的名字,能够通过创立 Rule 规定限度指标的输入。
filename:文件名,日志保留文件时能够保留到该文件中。文件名反对参数化,通过各种参数更不便的输入日志。
archiveFileName:为了避免日志文件保留的太大,咱们将日志文件拆分保留。通过 archiveFileName 参数设置保留格局, 具体格局能够到这里查看。
createDirs:若设置的日志文件夹不存在,则主动创立文件夹。
keepFileOpen:为了进步文件写入性能,防止每次写入文件都开关文件,将 keepFileOpen 设置为 true, 咱们通过 openFileCacheTimeout 参数定时敞开文件。
autoFlush:为了进步日志写入性能,不用每次写入日志都间接写入到硬盘上,将 autoFlush 设置为 false,咱们通过 openFileFlushTimeout 参数定时写入文件。
openFileCacheTimeout:将 keepFileOpen 参数设置为 false,则设置定时敞开日志。避免日志始终开着占用着。
openFileFlushTimeout:将 autoFlush 参数设置为 false,则设置定时将日志从缓存写入到硬盘工夫。
archiveAboveSize:为了避免一个文件日志太大,咱们须要依据指定大小将日志拆文件保留。archiveAboveSize参数的单位是字节。通过设置为 10240=10KB,每个日志大小达到 10KB 就会主动拆分文件,拆分后的文件名规定通过 archiveFileName 设置,拆分文件名的规定通过 archiveNumbering 设置,具体规定能够查看这里。
concurrentWrites:反对多个并发一起写文件,进步文件写入性能。
encoding:Nlog 默认保留的编码格局为 Encoding.Default,中文保留到日志中会呈现乱码,将其设置为 utf-8,就能够失常保留了。
layout:示意输入的格局,若为最简略的内容输出,则间接通过参数设置输出格局即可。除了最简略的文本格式还反对以下四种类型的数据,通过 xsi:type 参数设置 layout 的格局,如xsi:type="JsonLayout"

  • CSV – A specialized layout that renders CSV-formatted events.
  • Compound – A layout containing one or more nested layouts.
  • Log4JXml – A specialized layout that renders Log4j-compatible XML events.
  • JSON – A specialized layout that renders to JSON. Json 格局保留咱们须要在 layout 节点下减少 attribute 来减少字段。
rules 配置

咱们能够创立一系列规定束缚输入的内容。办法是在 NLog 节点下增加 rules 节点,rules 节点下能够增加多个 logger 节点,每个 logger 节点为一条束缚。

<rules>
    <logger name="*" minlevel="Debug" writeTo="file" />
</rules>
  • name:logger 名称,若为 ’*’,则示意用于所有日志。
  • minlevel:示意以后束缚的最小等级,只有等于或大于该值的日志等级才会被记录。
  • writeTo:示意以后规定束缚那个 target。
正文完
 0