zoukankan      html  css  js  c++  java
  • C#日志使用

    本文参考链接

    日志框架

    框架选择: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。
    转载请注明出处,欢迎交流。
  • 相关阅读:
    浅析ES6中的iterator
    nodejs中的异步回调机制
    用好js与nodejs中的try...catch
    vscode设置html默认浏览器
    nodejs中相互引用(循环引用)的模块分析
    ES6—带默认值的函数参数及其作用域
    函数声明与函数表达式的区别
    let块级引起的闭包思考
    进程与线程
    angular(^4)-监控表格按键行为的问题
  • 原文地址:https://www.cnblogs.com/louzixl/p/14198904.html
Copyright © 2011-2022 走看看