在一些特定场景的业务需求下,日志需要写入到不同的路径下提供日志分析。
第一种:默认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. Spring Boot国际化支持

    本章将讲解如何在Spring Boot和Thymeleaf中做页面模板国际化的支持,根据系统语言环境或者session中的语言来自动读取不同环境中的文字. 国际化自动配置 Spring Boot中已经 ...

  2. 迭代器,生成器,yield,yield from理解

    迭代器 说到迭代器就得想说可迭代对象Iterable,实现了__iter__()方法的对象都是可迭代对象,例如很多容器,list ,set, tuples.使用iter方法可以把一个可迭代对象变成迭代 ...

  3. byte为什么要与0xff

    面对带正负号的数,会采用符号扩展,如果原值是正数,则高位补上0:如果原值是负数,高位补1.二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.当前的计算机系统使用的基本上是二 ...

  4. RPC协议的介绍

    根据网上搜索的一些资料摘抄汇总的,如果有误,欢迎斧正. 早期单机时代,一台电脑上运行多个进程,大家各干各的,老死不相往来.假如A进程需要一个画图的功能,B进程也需要一个画图的功能,程序员就必须为两个进 ...

  5. Shell内置命令let

  6. 使用eclipse开发java web网页

    前面说了手动配置一个应用,手动配置可以更深入的理解web应用的分布,但是一般的编辑器没有语法错误提示,所以开发起来对于错误的寻找不太容易,效率相对较低,所以在理解清楚web项目的结构之后,我们使用ec ...

  7. Windows NtQueryInformationProcess()

    { https://www.orcode.com/article/Processes_20126324.html } { 或代码 文章 编程通用 线程,进程及IPC 与NtQueryInformati ...

  8. Magento笔记/记录(1)

    1.Magento eav_attribute表中source如何指定自定义数据来源  如果你引用的类名为yebihai_usermanage_model_entity_school你必须完整的给出地 ...

  9. AcWing 197. 阶乘分解 (筛法)打卡

    给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可. 输入格式 一个整数N. 输出格式 N! 分解质因数后的结果,共若干行,每行一对pi, ...

  10. C++一些不常见的库及函数

    pbds库 平衡树:one , two #include <bits/extc++.h> using namespace std; using namespace __gnu_pbds; ...