NLog是什么?

这里还是简单介绍一下吧,为了让小白也知道。NLog是一个灵活的免费日志记录平台,适用于各种.NET平台,包括.NET Core。NLog可以通过简单地配置就可以可以很方便的写入多个日志仓库中(数据库,文件,控制台)。

NLog在Net Core中怎么用啊?

  1. 用之前你得新建一个asp.net core项目吧。这里以net core api为例吧。如下图所示是博主刚刚创建的net core api项目。

  1. 建好项目之后干什么呢、当然得添加引用了。你可以随心所欲的使用Nuget或者命令进行安装

    Install-Package NLog -Version 4.6.5
    Install-Package NLog.Web.AspNetCore -Version 4.8.4
    Install-Package MySql.Data -Version 8.0.16
  2. 上面说了,NLog只需要简单地修改配置就可以使用,那接下来就是新建一个NLog配置文件了。你可以通过Nuget或者程序包控制台进行安装,也可以自己新建一个NLog.config文件。这里还是通过程序包控制台进行安装吧

    安装后看到项目目录多了一个NLog.config文件。这里需要注意,右键设置一下这个NLog.config的属性为“始终复制”

  3. 打开nlog.config文件,看看里面的结构,发现有两个重要节点,一个是声明目标 一个是声明规则。如下图所示,我配置了一个写入文件,一个写入mysql的target.并定义了不同的写入规则,大家可以根据实际需要参照着自定义规则以及target.

    <?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    autoReload="true"
    throwExceptions="true"
    internalLogLevel="Off" internalLogFile="nlog.txt">
    <targets async="true"><!--async设置同步异步 true:异步 false:同步-->
    <target name="file" xsi:type="File"
    layout="${longdate} ${logger} ${message}${exception:format=ToString}"
    fileName="${basedir}/logs/nlog.txt"
    keepFileOpen="true"
    encoding="utf-8" />
    <target xsi:type="Null" name="blackhole" />
    <target name="database" xsi:type="Database"
    dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"
    connectionString="server=127.0.0.1;Database=数据库名;user id=root;password=111111;SslMode=none"
    >
    <!--
    CREATE TABLE `log` (
    `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `Application` varchar(50) DEFAULT NULL,
    `Logged` datetime DEFAULT NULL,
    `Level` varchar(50) DEFAULT NULL,
    `Message` varchar(512) DEFAULT NULL,
    `Logger` varchar(250) DEFAULT NULL,
    `Callsite` varchar(512) DEFAULT NULL,
    `Exception` varchar(512) DEFAULT NULL,
    `Title` varchar(512) DEFAULT NULL,
    PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    -->
    <commandText>
    insert into logs (
    Application, Logged, Level, Message,
    Logger, CallSite, Exception,Title
    ) values (
    @Application, @Logged, @Level, @Message,
    @Logger, @Callsite, @Exception,@title
    );
    </commandText>
    <parameter name="@application" layout="NLogTestDemo" />
    <parameter name="@logged" layout="${date}" />
    <parameter name="@level" layout="${level}" />
    <parameter name="@message" layout="${message}" />
    <parameter name="@logger" layout="${logger}" />
    <parameter name="@callSite" layout="${callsite:filename=true}" />
    <parameter name="@exception" layout="${exception:tostring}" />
    <parameter name="@title" layout="${event-context:item=title}" /><!--自定义字段-->
    </target> </targets> <rules>
    <logger name="*" minlevel="Debug" writeTo="file" />
    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Debug" writeTo="database" />
    </rules>
    </nlog>
     
  4. 上面的代码中我是以写入mysql为例进行的NLog配置。下面就可以进行简单地使用了。首先需要在。首先在Startup中的Configure中来加入中间件:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
    if (env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    } //使用NLog作为日志记录工具
    loggerFactory.AddNLog();
    //引入Nlog配置文件
    env.ConfigureNLog("nlog.config");
    //app.AddNLogWeb();
    app.UseMvc();
    }
  5. 在Program中进行如下配置:

    public class Program
    {
    public static void Main(string[] args)
    {
    CreateWebHostBuilder(args).Build().Run();
    } public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseNLog()
    .UseStartup<Startup>();
    }
  6. 下面就可以在代码中愉快的玩耍了,

    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
    private readonly Logger nlog = LogManager.GetCurrentClassLogger(); //获得日志实;
    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    { //1、没有加自定义字段测试
    //nlog.Log(LogLevel.Debug, $"测试Debug日志");
    //nlog.Log(LogLevel.Info, $"测试Info日志");
    //try
    //{
    // throw new Exception($"故意抛出的异常");
    //}
    //catch (Exception ex)
    //{ // nlog.Log(LogLevel.Error, ex, $"异常的额外信息");
    //} //2、添加自定义字段测试
    //LogEventInfo log = new LogEventInfo();
    //log.Properties["title"] = "测试吧";
    //log.Level = LogLevel.Debug;
    //log.Message = "测试Debug";
    //nlog.Log(log);

    //3、测试异步同步
                 //设置<targets async="true"> true:异步 false:同步
                 //Stopwatch sw = new Stopwatch();
                 //sw.Restart();
                 //for (int i = 0; i < 5000; i++)
                 //{
                 // Manager.LogManager.Debug(new NLogInfo { message=$"异步测试---{i}" });//记录到数据库
                 //}
                 //sw.Stop();
                 //var s = sw.ElapsedMilliseconds;  耗时:600ms

                return new string[] { "value1", "value2" };
    } }
     
  7. 下面运行起来项目,然到数据库里面就可以看到记录的日志信息如下所示:

    这里大家可能会问,为什么没有Debug信息输出呢,这是因为我们上面NLog配置设置的记录日志的最低级别为Info.所以比Info级别小的Debug信息不会记录。如果想记录的话就把这个级别设置成Debug或者比Debug小的Trace就可以记录了。如下图所示:

原帖:https://blog.csdn.net/qq_42564846/article/details/81407097

最新文章

  1. storyboard中的三种传值
  2. Croppic – 免费开源的 jQuery 图片裁剪插件
  3. nyoj1000_快速幂_费马小定理
  4. (转)UVM内容梗概
  5. shell来start、stop、restart应用程序模板
  6. 【转】Solr安全设置——对外禁用管理后台
  7. 杭电1005-Number Sequence
  8. Vue.js学习 Item7 -- 条件渲染与列表渲染
  9. position:sticky用法
  10. 跨域解决方案CORS使用方法
  11. 005.ClearStoredGroups方法
  12. Centos7搭建php+mysql环境(整理篇)
  13. 导入excel错误:外部表不是预期的格式 解决方案(Oledb)
  14. 3.1,pandas【基本功能】
  15. Fix The thread xxx has exited with code 259 (0&#215;103)
  16. 模拟Vue之数据驱动5
  17. ps-修复
  18. 新浪云计算SAE部署代码过程
  19. HDU6043 KazaQ&#39;s Socks
  20. 201521123016《Java程序设计》第10周学习总结

热门文章

  1. mysql重置root密码,并设置可远程访问
  2. get与post一些特殊情况下
  3. ubuntu进不去桌面
  4. Emgu-WPF学习使用-Rectangle识别
  5. wcf 代理实例
  6. WPF Layout 系统概述——Measure
  7. Git Bash Cmd命令笔记
  8. 备份一个个人用的WPF万能转换器
  9. java设计模式(2)
  10. UWP入门(三) -- StackPanel与Grid的区别