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");