.NET Core NLog 基础使用 控制台 WinForms

.NET Core log4net、NLog日志  
NLog Config 
.NET Core 和 ASP.NET Core 中的日志记录 

Nlog配置文件变量
${basedir}:应用程序当前目录
${shortdate}:短日期【2022-01-06】
${longdate}:长日期【2022-01-06 14:05:20.4023】
${logger}: 记录器的名字
${event-properties:FileName}:自定义属性
${level}:记录等级【Trace,Debug,Info,Warn,Error,Fatal】
${uppercase}:转大写
${message}:调用Nlog时输入的内容
${callsite}:类名称
${callsite-linenumber}:文件行号
${hostname}:主机名
${environment} 环境变量
${exception} exception信息
${machinename} 名称
${mdc} 映射诊断
${mdlc} 异步映射诊断上下文
${ndc} 线程结构
${ndlc} 异步线程
${newline} 文字换行
${nlogdir} nlog.dll目录。
${performancecounter} 述性能计数器。
${processid} 当前进程标识符
${processinfo} 运行信息
${processname} 当前进程的名称。
${processtime} 该时间过程中格式HH:MM:ss.mmm。
${qpc} 高精度定时器,基于返回的值从queryperformancecounter(任选地)转换为秒。
${registry} 从注册表中的值。
${sequenceid} ID
${shortdate} 短时间 格式YYYY-MM-DD。
${sl-appinfo} Silverlight应用。
${specialfolder} 文件夹路径
${stacktrace} - 堆栈跟踪渲染器。
${tempdir} 临时目录中。
${threadid} 当前线程的标识符。
${threadname} 当前线程。
${ticks} 当前日期和时间。
${time} 24小时格式HH:MM:ss.mmm。
KaTeX parse error: Expected '}', got 'EOF' at end of input: {var} {var}-提供新的变量(4.1)
${windows-identity} indows线程标识信息(用户名)

1、管理 NuGet 程序包...

2、搜索 NLog,安装

3、在 web项目 根目录新建 NLog.config 配置文件

4、NLog.config 配置文件,代码如下(复制到输出目录:始终复制
注意:rules 节点优先级

<?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">
  <targets>

    <!--屏幕打印消息-->
    <target name="console" xsi:type="ColoredConsole" layout="${longdate}> ${message}"/>

    <!--VS输出窗口-->
    <target name="debugger" xsi:type="Debugger" layout="${longdate} | ${level:padding=-5} | ${message}" />

    <!--保存至文件-->
    <target name="info" xsi:type="File" maxArchiveFiles="30" fileName="${basedir}/Logs/Info/info${shortdate}.txt"
            layout="${date:format=HH\:mm\:ss} | ${message}" />

    <!--保存至文件-->
    <target name="error" xsi:type="File" maxArchiveFiles="30" fileName="${basedir}/Logs/Error/error${shortdate}.txt"
            layout="${date:format=HH\:mm\:ss} | ${message} | ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" />
    
    <target xsi:type="Null" name="blackhole" />

    <!-- write log message to database(数据库) -->
    <target name="database" xsi:type="Database"
            connectionString="Data Source=.;Initial Catalog=dbFinance;User ID=sa;Password=000000;Persist Security Info=True;">
      <commandText>
        INSERT INTO Log(Timestamp,Level,Message,Action,Amount,StackTrace) VALUES (@time_stamp, @level, @message, @action, @amount, @stacktrace);
      </commandText>
      <!-- database connection parameters -->
      <parameter name="@time_stamp" layout="${date}" />
      <parameter name="@level" layout="${level:uppercase=true}" />
      <parameter name="@message" layout="${message}" />
      <parameter name="@action" layout="${event-context:item=Action}" />
      <parameter name="@amount" layout="${event-context:item=Amount}" />
      <parameter name="@stacktrace" layout="${stacktrace}" />
    </target>
  </targets>
  <rules>
    <!--Skip non-critical Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <!--<logger name="*" writeTo="console" />-->
    <!--<logger name="*" minlevel="Debug" writeTo="debugger" />-->
    <logger name="*" minlevel="Info" maxlevel="Info" writeTo="info" />
    <logger name="*" minlevel="Trace" writeTo="info" />
    <logger name="*" minlevel="Error" writeTo="error" />
    <logger name="*" minlevel="Error" writeTo="database" />
  </rules>
</nlog>

*、NLog.config 配置文件,代码如下(复制到输出目录:始终复制
${event-properties:FileName}自定义log文件名称
【推荐、推荐、推荐、推荐、推荐、推荐、推荐、推荐、推荐】

<?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">
	
	<variable name="logDirectory" value="${basedir}/Logs"/>

	<targets>
		<!--保存至文件-->
		<target name="info" xsi:type="File" maxArchiveFiles="30" fileName="${logDirectory}/Info/info${event-properties:FileName}${shortdate}.txt"
				layout="${date:format=HH\:mm\:ss} ${message}" />
	<rules>
		<logger name="*" minlevel="Info" maxlevel="Info" writeTo="info" />
		<logger name="*" minlevel="Error" writeTo="error" />
	</rules>
</nlog>

5、调用方法

public class UserController : Controller
{
    private static readonly ILogger _logger = LogManager.GetLogger("Logger");
    Logger _log = LogManager.GetCurrentClassLogger();

    public ActionResult Index()
    {
        _logger.Trace("trace...");
        _logger.Debug("debug...");
        _logger.Info("static info...");
        _logger.Error("static error...");
        _logger.Fatal("Fatal Message");

        _log.Trace("trace...");
        _log.Debug("debug...");
        _log.Info("static info...");
        _log.Error("static error...");
        _log.Fatal("Fatal Message");

        return View();
    }
}

6、数据库表结构脚本

CREATE TABLE [dbo].[Log](
	[Id] [bigint] IDENTITY(1,1) NOT NULL,
	[Timestamp] [datetime] NULL,
	[Level] [nvarchar](500) NULL,
	[Message] [nvarchar](500) NULL,
	[Action] [nvarchar](500) NULL,
	[Amount] [nvarchar](500) NULL,
	[StackTrace] [nvarchar](500) NULL,
 CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

=========【.NET Core WebApi方式】=========

管理 NuGet 程序包
添加 NLog.Extensions,NLog.Web.AspNetCore 引用

Startup.cs文件

using NLog.Web;
using NLog.Extensions.Logging;

namespace Web
{
    public class Startup
    {
        NLog.Logger _log = NLog.LogManager.GetCurrentClassLogger();

        public void ConfigureServices(IServiceCollection services)
        {
            _log.Info("123");
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            #region nlog

            string path = AppContext.BaseDirectory;

            //引入Nlog配置文件
            loggerFactory.ConfigureNLog(path + @"\nlog.config");
            //使用NLog作为日志记录工具
            loggerFactory.AddNLog();

            //使用NLog作为日志记录工具
            //loggerFactory.AddNLog();
            引入Nlog配置文件
            //env.ConfigureNLog(path + @"\nlog.config");

            #endregion

            _log.Info("222");

            app.UseHttpsRedirection();
            app.UseMvc();
        }
    }
}

Controller调用(https://localhost:44319/api/default)

using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using NLog;

namespace Web.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class DefaultController : ControllerBase
    {
        private readonly Logger nLogger = NLog.LogManager.GetCurrentClassLogger();

        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            nLogger.Info("3 Info Message" + DateTime.Now.ToString("yyyy-MM-dd"));
            nLogger.Error("4 Error Message" + DateTime.Now.ToString("yyyy-MM-dd"));
            return new string[] { "value1", "value2" };
        }
    }
}

*
=========.NET Core WinForms方式=========
1、添加nlog.config文件【始终复制】
2、管理 NuGet 程序包(N)...

NLog
NLog.Extensions.Logging
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer

3、Program.cs

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;
using System;
using System.Windows.Forms;

namespace WinFormsApp1
{
    static class Program
    {
        /// <summary>
        ///  The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            NLog.LogManager.LoadConfiguration("nlog.config").GetCurrentClassLogger();

            var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();

            IServiceCollection services = new ServiceCollection();

            services.AddDbContext<TestDbContext>(opt =>
            {
                opt.UseSqlServer(configuration.GetConnectionString("Default"));
            });

            services.AddTransient<ILoggerFactory, LoggerFactory>();
            services.AddLogging(builder =>
            {
                builder.SetMinimumLevel(LogLevel.Trace);
                builder.AddNLog(new NLogProviderOptions
                {
                    CaptureMessageTemplates = true,
                    CaptureMessageProperties = true
                });
            });

            IServiceProvider serviceProvider = services.BuildServiceProvider();

            Application.Run(new Form1());
        }
    }
}

4、Form1.cs

using System;
using System.Windows.Forms;

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

            logger.Trace("Sample trace message");
            logger.Debug("Sample debug message");
            logger.Info("Sample informational message");
            logger.Warn("Sample warning message");
            logger.Error("Sample error message");
            logger.Fatal("Sample fatal error message");
        }
    }
}

*、NLogUtils调用

using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinForm
{
    public class Test
    {
        NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

        private void Check()
        {
            NLogUtils.GetInstance().Info(GetType().Name, "hello");
        }

        private void Check()
        {
            logger.WithProperty("FileName", GetType().Name).Info("hello");
        }
    }
}

*、NLogUtils.cs

using NLog;

namespace CoreLibrary
{
    public class NLogUtils
    {
        public static Logger _logger;
        private static volatile NLogUtils instance = null;
        private static readonly object lockHelper = new object();

        /// <summary>
        /// 单体模式返回当前类的实例
        /// </summary>
        /// <returns></returns>
        public static NLogUtils GetInstance()
        {
            if (instance == null)
            {
                lock (lockHelper)
                {
                    if (instance == null)
                    {
                        instance = new NLogUtils();
                        _logger = LogManager.GetCurrentClassLogger();
                    }
                }
            }
            return instance;
        }

        public void Info(string fileName, string message)
        {
            _logger.WithProperty("FileName", fileName).Info(message);
        }

        public void Error(string fileName, string message)
        {
            _logger.WithProperty("FileName", fileName).Error(message);
        }

        public void Debug(string fileName, string message)
        {
            _logger.WithProperty("FileName", fileName).Debug(message);
        }
    }
}

*
*
*
*
*

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 .NET Core 控制台应用中使用 NLog,需要进行以下步骤: 1. 安装 NLog 包。您可以在 NuGet 包管理器中搜索 NLog 并安装它,或使用命令行: ``` dotnet add package NLog ``` 2. 在项目根目录下创建一个名为 `nlog.config` 的文件,并将以下配置复制到文件中,以启用NLog: ```xml <?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" internalLogLevel="Trace" internalLogFile="c:\temp\nlog-internal.log"> <targets> <target name="file" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" /> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="file" /> </rules> </nlog> ``` 这样,NLog 就会将日志写入到当前应用程序目录下的 `logs` 文件夹中,并将日志文件名设置为当前日期。 3. 在应用程序入口点中,添加 NLog 配置和日志记录: ```csharp using NLog; using NLog.Config; using NLog.Targets; class Program { static void Main(string[] args) { // 加载NLog配置 LogManager.LoadConfiguration("nlog.config"); // 创建logger var logger = LogManager.GetCurrentClassLogger(); // 记录日志 logger.Info("Hello, NLog!"); // 等待用户按下任意键退出 Console.ReadKey(); } } ``` 这样就可以在控制台应用程序中使用 NLog 记录日志了。如果您需要更多的日志记录选项,可以参考 NLog 的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值