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

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

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

2、创建nlog配置文件

注意配置文件里面的:

<variable name="cuspath" value="" />

相当于根据变量的方式来定义日志输出目录
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" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwConfigExceptions="true"
internalLogLevel="info"> <!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<variable name="cuspath" value="" />
<!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="logs/${var:cuspath}nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" /> <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
<target xsi:type="File" name="ownFile-web" fileName="logs/${var:cuspath}nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" />
</targets> <!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" /> <!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxlevel="Info" final="true" />
<!-- BlackHole --> <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>

  

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<Startup>()
.UseNLog();

  

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

namespace FytSoa.Common
{
/// <summary>
/// 日志模块
/// </summary>
public class Logger
{
NLog.Logger _logger;
private Logger(NLog.Logger logger)
{
_logger = logger;
}
public Logger(string name) : this(LogManager.GetLogger(name))
{ } /// <summary>
/// 单例
/// </summary>
public static Logger Default { get; private set; }
static Logger()
{
Default = new Logger(LogManager.GetCurrentClassLogger());
} private static string _path = ""; /// <summary>
/// 自定义输出目录,初始化
/// </summary>
public void Setting(string path)
{
if (_path != path)
{
_path = path;
LogManager.Configuration.Variables["cuspath"] = path+"/";
}
} /// <summary>
/// 自定义写日志路径
/// </summary>
/// <param name="msg">消息</param>
/// <param name="path">写入地址</param>
/// <returns></returns>
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,一群内心骚动的小青年
 
 

NetCore2.2使用Nlog自定义日志写入路径配置方式的更多相关文章

  1. Hadoop案例(五)过滤日志及自定义日志输出路径(自定义OutputFormat)

    过滤日志及自定义日志输出路径(自定义OutputFormat) 1.需求分析 过滤输入的log日志中是否包含xyg (1)包含xyg的网站输出到e:/xyg.log (2)不包含xyg的网站输出到e: ...

  2. 转:NLog 自定义日志内容,写日志到数据库;修改Nlog.config不起作用的原因

    转:http://www.cnblogs.com/tider1999/p/4308440.html NLog的安装请百度,我安装的是3.2.NLog可以向文件,数据库,邮件等写日志,想了解请百度,这里 ...

  3. NLog自定义字段写入数据库表,示例

    //自定义字段写入NLog日志 private void saveNLog(InvokeLogModel model) { LogEventInfo ei = new LogEventInfo(); ...

  4. NLog 自定义字段 写入 oracle

    1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴代码 2.建表语句 create table TBL_LOG ( id ) not null, appname ...

  5. [转]NLog 自定义字段 写入 oracle

    本文转自:http://www.cnblogs.com/skyapplezhao/p/5690695.html 1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴 ...

  6. Java 自定义日志写入

    /** * 将信息写入到日志 * @param content * @return * @throws IOException */ public static boolean writeLog(St ...

  7. 使用NLog把日志写入数据库并按天自动分表

    前言 最近用Asp.net Core开发程序的时候 因为时间的关系,就没有过多的去关注日志方面的功能 都是直接用系统的ILogger先记录着,然后看日志的时候就先在命令行看日志 在开发阶段没有什么问题 ...

  8. NLog Helpper日志帮助类配置和使用

    1.帮助类  (首先需要引入NLog.dll) using System; namespace XXXXXX { /// <summary> /// 用法实例 : NLogTest.Nlo ...

  9. iscsi序列二、iscsi多路径配置方式

    一.ISCSI多路径应用 如果存储服务器到交换机只有一条线路的时候,那么一条线路出线故障,整个就没法使用了,所以多线路可以解决这个问题,避免单点故障 如上图,如果SAN服务器与客户端交换机只有一条线路 ...

随机推荐

  1. java爬取读者文摘杂志

    java爬虫入门实战练习 此代码仅用于学习研究 此次练习选择了读者文摘杂志网站进行文章爬取 练习中用到的都只是一些简单的方法,不过过程中复习了输入流输出流的使用以及文件的创建写入等知识,对自己还是有所 ...

  2. MHA-Atlas-MySQL高可用(下)

    MHA-Atlas-MySQL高可用(下) 链接:https://pan.baidu.com/s/17Av92KQnJ81Gc0EmxSO7gA 提取码:a8mq 复制这段内容后打开百度网盘手机App ...

  3. update 后没有加where条件解决办法

    MySQL 误操作后数据恢复(update,delete忘加where条件) 在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句写的有问题导致服务器出问题,导致资源耗尽.最危险的操 ...

  4. 【Muduo库】【base】基本类

    一.Timestamp类  1.类图如下: 2.  知识点 (1)     这个类继承了 muduo::copyable, 以及 boost::less_than_comparable. (2)    ...

  5. property和attribute的区别---value

    从网上看到很多写关于input的value属性,写的setAttribute可以影响DOM的property的value,在实践中我发现不同现象, 在页面初始化后,用setAttribute对valu ...

  6. vue子组件获取父组件方法

    注:以下代码未使用esLint语法检查 父组件: <template> <div class="wrapper"> <cp_action @paren ...

  7. Add cast to是什么意思

    eclipse中是强制类型转换的意思.

  8. asp.net core Mvc 增删改查

    1.创建项目 创建Data文件夹 创建实体类Students/cs public class Students { public Guid Id { get; set; } public string ...

  9. leetcode-161周赛-1250-检查好数组

    题目描述: 唯一的结论是如果数组中所有数的最大公约数为 1,则存在解,否则不存在.所以只需要计算所有数最大公约数即可,时间复杂度O(nlog(m)),其中 m 为数字大小. class Solutio ...

  10. bzoj 2084

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2084 这道题很容易想到就是一个变种的最长回文字串, 不过回文的规则变成了s[i + p[i] ...