.NET 控制台NLog 使用

前言

我们需要一个日志Log去记录日常发生的信息,这样方便以后出现问题的时候回去找报错的日志

NLog

NLog 是Log的.net 移植版本,.net 将很多别的已经成熟的第三方库进行了移植。

NLog使用

在这里插入图片描述

NLog 官网文档

NLog .net core 官方文档

NLog详细教程-2022/12/01

使用

在这里插入图片描述

最简单的配置信息

<?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>
    <!--输出目标:name名称f,xsi:type输出类型文件, fileName输出到程序根目录logs文件夹中, 以日期作为生成log文件名称, layout生成内容的格式-->
    <target name="f"
            xsi:type="File"
            fileName="${basedir}/logs/${shortdate}.txt"
            layout="${date:format=yyyy-MM-dd HH\:mm\:ss} [${uppercase:${level}}] : ${message}" />
  </targets>
  <rules>
    <!--日志路由规则:最低级别Debug,输出到target目标f-->
    <logger name="*"
            minlevel="Debug"
            writeTo="f" />
  </rules>
</nlog>


如果想输出年月日文件夹。可以修改到如下配置

<?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>
    <!--输出目标:name名称f,xsi:type输出类型文件, fileName输出到程序根目录logs文件夹中, 以日期作为生成log文件名称, layout生成内容的格式-->
    <target name="f"
            xsi:type="File"
            fileName="${basedir}/Logs/${date:format=yyyy}/${date:format=MM}/${date:format=HH}.log"
            layout="${date:format=yyyy-MM-dd HH\:mm\:ss} [${uppercase:${level}}] : ${message}" />
  </targets>
  <rules>
    <!--日志路由规则:最低级别Debug,输出到target目标f-->
    <logger name="*"
            minlevel="Debug"
            writeTo="f" />
  </rules>
</nlog>

为了增强Error的日志鲜明性,我们将Error单独列出一个文件夹

<?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>
    <!--将Debug导出为每小时一个-->
    <target name="debug"
            xsi:type="File"
            fileName="${basedir}/Logs/${date:format=yyyy}/${date:format=MM}/${date:format=dd}/${date:format=HH}.log"
            layout="${date:format=yyyy-MM-dd HH\:mm\:ss} [${uppercase:${level}}] : ${message}" />
    <!--将Error导出为每天一个,而且存放在一个Error文件夹中-->
    <target name="error"
            xsi:type="File"
            fileName="${basedir}/Logs/${date:format=yyyy}/${date:format=MM}/Error/${date:format=dd}.log"
            layout="${date:format=yyyy-MM-dd HH\:mm\:ss} [${uppercase:${level}}] : ${message}" />
  </targets>


  <rules>
    <logger name="*"
            minlevel="Debug"
            writeTo="debug" />

    <logger name="*"
        minlevel="Error"
        writeTo="error" />
  </rules>
</nlog>

在这里插入图片描述

测试

using NLog.Config;
using NLog;

namespace FuJian_mqtt
{
    internal class Program
    {
        static void Main(string[] args)
        {

            //初始化配置日志
            LogManager.Configuration = new XmlLoggingConfiguration(string.Format("{0}/NLog.config", AppDomain.CurrentDomain.BaseDirectory.ToString()));
            var logger = NLog.LogManager.GetCurrentClassLogger();
            logger.Debug("我修改了日志sss的时间");

            Console.WriteLine("Hello, World!");
        }
    }
}

工具类使用

搭配我之前的彩色控制台打印

C# 控制台彩色打印

彩色打印

using NLog;
using NLog.Config;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Console = Colorful.Console;//这个是重点
namespace FuJian_mqtt.Utils
{
    public static class LogHelper
    {
        private static Logger logger;

        static LogHelper()
        {
            LogManager.Configuration = new XmlLoggingConfiguration(string.Format("{0}/NLog.config", AppDomain.CurrentDomain.BaseDirectory.ToString()));
            logger = NLog.LogManager.GetCurrentClassLogger();
        }

        public static void Debug(object res)
        {
            Console.WriteLine(res);
            logger.Debug(res);
        }

        public static void Info(object res)
        {
            Console.WriteLine(res, Color.LightGreen);
            logger.Info(res);
        }

        public static void Error(object res)
        {
            Console.WriteLine(res, Color.Red);
            logger.Error(res);
        }

        public static void Warning(object res)
        {
            Console.WriteLine(res, Color.Yellow);
            logger.Warn(res);
        }
    }
}

使用结果

在这里插入图片描述
在这里插入图片描述

由于Colorful.Console不在维护,对彩色打印进行修改

using NLog.Config;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WpfApp1.Utils
{
    public static class NLogHelper
    {
        private static Logger logger;

        static NLogHelper()
        {
            LogManager.Configuration = new XmlLoggingConfiguration(string.Format("{0}/NLog.config", AppDomain.CurrentDomain.BaseDirectory.ToString()));
            logger = NLog.LogManager.GetCurrentClassLogger();
        }

        public static void Debug(string msg)
        {
            Console.WriteLine(msg);
            logger.Debug(msg);
        }

        public static void Info(string msg)
        {
            ConsoleWirte(msg,ConsoleColor.Green);
            logger.Info(msg);

        }

        public static void Error(string msg)
        {
            ConsoleWirte(msg, ConsoleColor.Red);

            logger.Error(msg);
        }

        public static void Warning(string msg)
        {
            ConsoleWirte(msg, ConsoleColor.Yellow);
            logger.Warn(msg);
        }

        public static void ConsoleWirte(string msg,ConsoleColor color)
        {
            Console.ForegroundColor = color;
            Console.WriteLine(msg);
            Console.ResetColor();
        }
    }
}

以Service的方式注入

public class NlogService
{

    private Logger logger;

    public NlogService()
    {
        LogManager.Configuration = new XmlLoggingConfiguration(string.Format("{0}/NLog.config", AppDomain.CurrentDomain.BaseDirectory.ToString()));
        logger = NLog.LogManager.GetCurrentClassLogger();
    }

    public void Debug(string msg)
    {
        Console.WriteLine(msg);
        logger.Debug(msg);
    }

    public void Info(string msg)
    {
        ConsoleWirte(msg, ConsoleColor.Green);
        logger.Info(msg);

    }

    public void Error(string msg)
    {
        ConsoleWirte(msg, ConsoleColor.Red);

        logger.Error(msg);
    }

    public void Warning(string msg)
    {
        ConsoleWirte(msg, ConsoleColor.Yellow);
        logger.Warn(msg);
    }

    public void ConsoleWirte(string msg, ConsoleColor color)
    {
        Console.ForegroundColor = color;
        Console.WriteLine(msg);
        Console.ResetColor();
    }

}

带title的打印

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UdpReciveDemo.Utils
{
    public class PrintHelper
    {

        private NlogHelper nlogHelper;

        private string title = "title";

        public PrintHelper(NlogHelper nlogHelper)
        {
            this.nlogHelper = nlogHelper;
        }


        public void SetTitle(string Title)
        {
            title = $"[{Title}]:";
        }

        public void Debug(string msg)
        {

            nlogHelper.Debug(title+msg);
        }

        public void Error(string msg)
        {
            nlogHelper.Error(title + msg);
        }

        public void Warning(string msg)
        {
            nlogHelper.Warning(title + msg);
        }

        public void Info(string msg)
        {
            nlogHelper.Info(title + msg);
        }

    }
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值