NetCore2.2使用Nlog自定义日志写入路径配置方式
在一些特定场景的业务需求下,日志需要写入到不同的路径下提供日志分析。
第一种:默认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文件中
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} loggerFactory.AddNLog();
env.ConfigureNLog("nlog.config"); app.UseMvc();
}
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、使用方法
- Logger.Default.Info("TestDefault"+i);
- 设置输出目录:Logger.Default.Setting("task");
- 调用日志方法:Logger.Default.Setting("task_log");
NetCore2.2使用Nlog自定义日志写入路径配置方式的更多相关文章
- Hadoop案例(五)过滤日志及自定义日志输出路径(自定义OutputFormat)
过滤日志及自定义日志输出路径(自定义OutputFormat) 1.需求分析 过滤输入的log日志中是否包含xyg (1)包含xyg的网站输出到e:/xyg.log (2)不包含xyg的网站输出到e: ...
- 转:NLog 自定义日志内容,写日志到数据库;修改Nlog.config不起作用的原因
转:http://www.cnblogs.com/tider1999/p/4308440.html NLog的安装请百度,我安装的是3.2.NLog可以向文件,数据库,邮件等写日志,想了解请百度,这里 ...
- NLog自定义字段写入数据库表,示例
//自定义字段写入NLog日志 private void saveNLog(InvokeLogModel model) { LogEventInfo ei = new LogEventInfo(); ...
- NLog 自定义字段 写入 oracle
1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴代码 2.建表语句 create table TBL_LOG ( id ) not null, appname ...
- [转]NLog 自定义字段 写入 oracle
本文转自:http://www.cnblogs.com/skyapplezhao/p/5690695.html 1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴 ...
- Java 自定义日志写入
/** * 将信息写入到日志 * @param content * @return * @throws IOException */ public static boolean writeLog(St ...
- 使用NLog把日志写入数据库并按天自动分表
前言 最近用Asp.net Core开发程序的时候 因为时间的关系,就没有过多的去关注日志方面的功能 都是直接用系统的ILogger先记录着,然后看日志的时候就先在命令行看日志 在开发阶段没有什么问题 ...
- NLog Helpper日志帮助类配置和使用
1.帮助类 (首先需要引入NLog.dll) using System; namespace XXXXXX { /// <summary> /// 用法实例 : NLogTest.Nlo ...
- iscsi序列二、iscsi多路径配置方式
一.ISCSI多路径应用 如果存储服务器到交换机只有一条线路的时候,那么一条线路出线故障,整个就没法使用了,所以多线路可以解决这个问题,避免单点故障 如上图,如果SAN服务器与客户端交换机只有一条线路 ...
随机推荐
- Spring Boot国际化支持
本章将讲解如何在Spring Boot和Thymeleaf中做页面模板国际化的支持,根据系统语言环境或者session中的语言来自动读取不同环境中的文字. 国际化自动配置 Spring Boot中已经 ...
- 迭代器,生成器,yield,yield from理解
迭代器 说到迭代器就得想说可迭代对象Iterable,实现了__iter__()方法的对象都是可迭代对象,例如很多容器,list ,set, tuples.使用iter方法可以把一个可迭代对象变成迭代 ...
- byte为什么要与0xff
面对带正负号的数,会采用符号扩展,如果原值是正数,则高位补上0:如果原值是负数,高位补1.二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.当前的计算机系统使用的基本上是二 ...
- RPC协议的介绍
根据网上搜索的一些资料摘抄汇总的,如果有误,欢迎斧正. 早期单机时代,一台电脑上运行多个进程,大家各干各的,老死不相往来.假如A进程需要一个画图的功能,B进程也需要一个画图的功能,程序员就必须为两个进 ...
- Shell内置命令let
- 使用eclipse开发java web网页
前面说了手动配置一个应用,手动配置可以更深入的理解web应用的分布,但是一般的编辑器没有语法错误提示,所以开发起来对于错误的寻找不太容易,效率相对较低,所以在理解清楚web项目的结构之后,我们使用ec ...
- Windows NtQueryInformationProcess()
{ https://www.orcode.com/article/Processes_20126324.html } { 或代码 文章 编程通用 线程,进程及IPC 与NtQueryInformati ...
- Magento笔记/记录(1)
1.Magento eav_attribute表中source如何指定自定义数据来源 如果你引用的类名为yebihai_usermanage_model_entity_school你必须完整的给出地 ...
- AcWing 197. 阶乘分解 (筛法)打卡
给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可. 输入格式 一个整数N. 输出格式 N! 分解质因数后的结果,共若干行,每行一对pi, ...
- C++一些不常见的库及函数
pbds库 平衡树:one , two #include <bits/extc++.h> using namespace std; using namespace __gnu_pbds; ...