项目中的NLog日志记录

日志服务记录到大多数程序运行操作记录,一个好的程序必须要有一个好的日志服务以确定程序服务的正常运行做有效的排查自检工作。

NLoger日志服务

NLoger日志服务是一个开源的C#日志服务插件包,作为一个工具类里面有强大的日志记录功能,只需要简单的配置就可以在项目中顺利的运行它。记录形式更是多种多样。
相比于LogNet4其项目占比空间更小不需要过多的配置即可运行的项目中,实现日志服务,让使用者更多的关注于项目本身,不在为日志记录所烦恼

并且NLog可以运行几乎所有的.net 平台上,做了足够多的兼容,不用应为.net core,window8而感到焦虑

项目中的NLoger配置设置

首先先搭建一个测试环境,这里使用的是一个简单的Windows服务中编写一个定时器实现NLoger日志在项目中的配置的说明。

  1. 新建测试项目
    打开Visual Studio 开发工具,新建项目“Windows 服务”
    打开开发工具新建项目

名称随意起一个自己想要的程序服务
2. 在项目中添加NLoger
新建完成后在侧边栏选中项目右键选择GUn里NuGet程序包,搜索NLog
NLog NuGet程序包

选择添加NLog、NLog.Schems、NLog.Config程序集
NLog:为日志服务的核心业务,支持多种平台并
NLog.Schems:为日志服务结构
NLog.config:为日志服务篇日志文件,日志服务的路径模板皆在次文件中进行被指修改
安装后的项目
NLog文件安装后

项目中新添加的两个文件NLog.config和NLog.xsd文件本篇文章主要关注的是配置文件的
3. NLog.config中的配置文件说明
打开Nlog.comfig文件会看到其中有很多默认的配置和一些说明,这里不做过多的介绍,主要看被注释掉的两个部分把其中解除注释

效果如下

<targets>
    <!--其中设置的为日志的输出格式 xsi:type="File" 这里可以设置成 colorconsole(控制台),database(数据库) 这里不做过多介绍,如有兴趣请参考官方文档 -->
   <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} |${logger}: ${uppercase:${level}} ${message}|${exception:format=message}" />
    <!--
        filename:文件路径名名称
        layout:文件输出模板
        更多设置请参见官方文档教程
    -->
  </targets>

  <rules>
  <!--logger 日志角色名称 minlevel 最小级别 级别分为 debug 、info等集中类型 writeTo 使用数据模板名称 -->
    <logger name="*" minlevel="Debug" writeTo="f" />    
  </rules>
  1. Window服务程序部分

项目根目录下选中Service1.cs打开设计界面鼠标右键选择添加安装程序
安装程序

项目中根目录下新添加projectinstall.cs单击文件打开设计界面,界面中出现serviceProcessInstaller1serviceInstaller1两个文件
选中ServiceInstaller1鼠标右键打开属性界面设置服务程序
ServiceInstaller1

设计中:
(name):当前安装程序功能名称
杂项:
DelayedAutoStart:设置服务程序自启动
Description:服务描述展现在服务列表的描述列
DisplayName:服务展示名称
Parent:安装程序名称
SerivceName:安装程序名称
其他项默认即可
serviceProcessInstaller1鼠标右键进入属性将Account 选项修改为LocalSystem
ProcessInstaller

service1.cs类代码部分

using System.ServiceProcess;
using System.Threading;
using System.Threading.Tasks;
using NLog;
namespace NLogerTest
{
    public partial class NLogerService : ServiceBase
    {
        //声明日志服务类
        private readonly Logger _nloger = LogManager.GetCurrentClassLogger();
        //声明服务线程token
        private CancellationTokenSource cancellation;
        public NLogerService()
        {
            InitializeComponent();
            //加载完成后记录日志
            _nloger.Info("加载: 日志服务已经准备就绪!");
        }
        //启动服务
        protected override void OnStart(string[] args)
        {
            //
            _nloger.Info("启动: 日志服务正在启动 请稍后...");

            _nloger.Info("启动: NLoger日志服务已启动");
            cancellation = new CancellationTokenSource();
            //使用线程工厂开启新线程
            Task.Factory.StartNew(AutoLogger, cancellation.Token);
        }
        //暂停服务
        protected override void OnStop()
        {
            //取消token
            cancellation.Cancel();
            //释放token
            cancellation.Dispose();
            //记录停止输出
            _nloger.Info("停止: NLoger服务已暂停");
        }
        //记录日志服务
        public void AutoLogger()
        {
            //判断token是否有效
            while (!cancellation.IsCancellationRequested)
            {
                _nloger.Info("日志成功执行");
                //执行后线程睡眠1分钟
                Thread.Sleep(60*1000);
            }
        }

    }
}

编写号代码后选中选项目点击生成即可
以上为window服务代码部分

  1. 安装程序测试结果

本次安装程序使用windows自带的InstallUtil.exe程序安装服务其保存目录为C:\Windows\Microsoft.NET\Framework64\v4.0.30319

找到计算中命令提示符鼠标右键以管理员身份运行导航到InstallUtil.exe目录下 输入命令 installutil.exe 程序生成目录\NLogerTest\bin\Release\NLogerTest.exe
安装服务

出现类似信息证明服务安装成功
即可在服务中找到相应的服务程序名称
服务列表

选中服务点击运行即可
卸载对应服务命令

installutil.exe -u 程序生成目录\NLogerTest\bin\Release\NLogerTest.exe

查看日志输出:如图 运行结果和预定设置的一样
日志输出

总结

日志服务在程序占据很重要的地位一个好的日志服务在编程定位错误输出的地方起到很关键的作用,省去大部分的代码debug流程,NLog日志小而轻非常适合小团队小项目集成敏捷开发,不需要过多的配置变可以运行在项目中

posted @ 2021-10-16 17:01  就着  阅读(373)  评论(0编辑  收藏  举报