NetCore 使用Nlog自定义日志写入路径配置方式


在一些特定场景的业务需求下,日志需要写入到不同的路径下提供日志分析。
第一种:默认Nlog可以通过日志级别来区分路径,
——优点是不需要额外配置,开箱即用
——缺点是不够灵活,如果超过级别数量,则不满足需求

第二种:通过定义FileTarget来根据业务写入不同的地址

废话不多说了,直接上代码
1、创建NetCore,并且引入Nlog和NLog.Web.AspNetCore 这个就不介绍和贴图了

2、创建nlog配置文件

注意配置文件里面的:


相当于根据变量的方式来定义日志输出目录
github文档说明地址:https://github.com/NLog/NLog/wiki/Configuration-file
在输入文件名称中加入变量名称:

fileName="logs/${var:cuspath}nlog-all-${shortdate}.log"
上面,默认是输出到logs/目录中
<?xml version="1.0" encoding="utf-8" ?>


  
  
    
  
  
  
  
    
    

    
    
  

  
  
    
    

    
    
    

    
  

3、注册,在Starup.cs文件中

Configure方法里面注册下
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            

            loggerFactory.AddNLog();
            env.ConfigureNLog("nlog.config");

            

            app.UseMvc();
        }
  4、Program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup()
                .UseNLog();

5、为了扩展,我们新建一个类来处理日志的写入

namespace FytSoa.Common
{
    /// 
    /// 日志模块
    /// 
    public class Logger
    {
        NLog.Logger _logger;
        private Logger(NLog.Logger logger)
        {
            _logger = logger;
        }
        public Logger(string name) : this(LogManager.GetLogger(name))
        {

        }

        /// 
        /// 单例
        /// 
        public static Logger Default { get; private set; }
        static Logger()
        {
            Default = new Logger(LogManager.GetCurrentClassLogger());
        }

        private static string _path = "";

        /// 
        /// 自定义输出目录,初始化
        /// 
        public void Setting(string path)
        {
            if (_path != path)
            {
                _path = path;
                LogManager.Configuration.Variables["cuspath"] = path+"/";
            }
        }

        /// 
        /// 自定义写日志路径
        /// 
        /// 消息
        /// 写入地址
        /// 
        public void Process(string msg, string path="")
        {
            _logger.Debug(msg);
        }

        #region Debug
        public void Debug(string msg, params object[] args)
        {
            _logger.Debug(msg, args);
            //LogManager.Shutdown();
        }

        public void Debug(string msg, Exception err)
        {
            _logger.Debug(err, msg);
            //LogManager.Shutdown();
        }
        #endregion

        #region Info
        public void Info(string msg, params object[] args)
        {
            _logger.Info(msg, args);
            //LogManager.Shutdown();
        }

        public void Info(string msg, Exception err)
        {
            _logger.Info(err, msg);
            //LogManager.Shutdown();
        }
        #endregion

        #region Warn
        public void Warn(string msg, params object[] args)
        {
            _logger.Warn(msg, args);
            //LogManager.Shutdown();
        }

        public void Warn(string msg, Exception err)
        {
            _logger.Warn(err, msg);
            //LogManager.Shutdown();
        }
        #endregion

        #region Trace
        public void Trace(string msg, params object[] args)
        {
            _logger.Trace(msg, args);
            //LogManager.Shutdown();
        }

        public void Trace(string msg, Exception err)
        {
            _logger.Trace(err, msg);
            //LogManager.Shutdown();
        }
        #endregion

        #region Error
        public void Error(string msg, params object[] args)
        {
            _logger.Error(msg, args);
            //LogManager.Shutdown();
        }

        public void Error(string msg, Exception err)
        {
            _logger.Error(err, msg);
            //LogManager.Shutdown();
        }
        #endregion

        #region Fatal
        public void Fatal(string msg, params object[] args)
        {
            _logger.Fatal(msg, args);
            //LogManager.Shutdown();
        }

        public void Fatal(string msg, Exception err)
        {
            _logger.Fatal(err, msg);
            //LogManager.Shutdown();
        }
        #endregion
    }
}

 注意:

 public void Setting(string path)
方法是设置目录输入位置的

6、使用方法

默认输出到logs文件夹
  • Logger.Default.Info("TestDefault"+i);
自定义输入到其他目录
  • 设置输出目录:Logger.Default.Setting("task");   
  • 调用日志方法:Logger.Default.Setting("task_log");
 task_log会输出到logs/task  文件夹     开源项目NetCore 2.2   https://github.com/feiyit/FytSoaCms       page razor方式 NetCore3.1   https://github.com/feiyit/FytSoa3.1         前后端分离   关注我,和小伙伴们在NetCore的代码里一起骚起来 群号:1060012125,一群内心骚动的小青年