NLog日志封装和配置(C#)

2024-09-07 04:08

本文主要是介绍NLog日志封装和配置(C#),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。
NLog是一个简单灵活的.NET日志记录类库。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(target)中。

简单的说可以用NLog记录系统中的日志,尤其是项目上线以后在线上如果出现问题,没有日志将很难定位到问题。

NLog下载http://nlog-project.org/download/

下面主要是我在项目中封装的一个日志类,以及NLog的配置文件。

需要引用dll,NLog.dll ,命名空间:

using NLog;
using NLog.Config;

封装的日志类为:

/// <summary>
/// 项目日志封装
/// </summary>
public class Logs
{private static Logger logger = LogManager.GetCurrentClassLogger(); //初始化日志类/// <summary>/// 日志状态枚举/// </summary>private enum LogState{/// <summary>/// 用户已登录/// </summary>NLogin,/// <summary>/// 用户未登录/// </summary>YLogin,}/// <summary>/// 静态构造函数/// </summary>static Logs(){//初始化配置日志LogManager.Configuration = new XmlLoggingConfiguration(System.AppDomain.CurrentDomain.BaseDirectory.ToString() + "\\Demo\\NLog.config");}/// <summary>/// 日志写入通用方法(建议使用)/// </summary>/// <param name="msg">日志内容</param>/// <param name="logType"> 日志类别///     类别: 1.Debug///           2.Info///           3.Error///           4.Fatal///           5.Warn/// </param>/// <param name="loginState">登录状态  true:有用户登录信息 false 无用户登录信息</param>/// <remarks>///     注:默认类型为Info 可以配置其他日志 logType用于反射 规则一定要准确///     例:  1.默认日志 LogWriter("test log");   正常的业务日志///          2.异常日志 LogWriter("test log","Fatal");  try catch 里请使用这个日志级别///     /// </remarks>public static void LogWriter(String msg, String logType = "Info", bool loginState = true){try{String logMethod = "";  //调用者类名和方法名if (logType == "Fatal"){StackTrace trace = new StackTrace();//获取是哪个类来调用的  String invokerType = trace.GetFrame(1).GetMethod().DeclaringType.Name;//获取是类中的那个方法调用的  String invokerMethod = trace.GetFrame(1).GetMethod().Name;logMethod = invokerType + "." + invokerMethod + " | ";}String IP = HttpContext.Current.Request.UserHostAddress;   //获取IP//反射执行日志方法Type type = typeof(Logger);MethodInfo method = type.GetMethod(logType, new Type[] { typeof(String) });if (loginState == true){//如果是登陆状态 可以记录用户的登陆信息 比如用户名,Id等method.Invoke(logger, new object[] { logMethod + msg + " [ " + IP + " | " + LogState.NLogin + " ]" });}else{method.Invoke(logger, new object[] { logMethod + msg + " [ " + IP + " | " + LogState.NLogin + " ]" });}}catch{//日志代码错误,直接记录日志Fatal(msg);Warn(msg);}}/// <summary>/// 调试日志/// </summary>/// <param name="msg">日志内容</param>private static void Debug(String msg){logger.Debug(msg);}/// <summary>/// 信息日志/// </summary>/// <param name="msg">日志内容</param>/// <remarks>///     适用大部分场景///     1.记录日志文件/// </remarks>private static void Info(String msg){logger.Info(msg);}/// <summary>/// 错误日志/// </summary>/// <param name="msg">日志内容</param>/// <remarks>///     适用异常,错误日志记录///     1.记录日志文件/// </remarks>private static void Error(String msg){logger.Error(msg);}/// <summary>/// 严重致命错误日志/// </summary>/// <param name="msg">日志内容</param>/// <remarks>///     1.记录日志文件///     2.控制台输出/// </remarks>private static void Fatal(String msg){logger.Fatal(msg);}/// <summary>/// 警告日志/// </summary>/// <param name="msg">日志内容</param>/// <remarks>///     1.记录日志文件///     2.发送日志邮件/// </remarks>private static void Warn(String msg){try{logger.Warn(msg);}catch { }}
}

如果是后台服务或者只简单记下日记 可以直接用

logger.Info(msg);
logger.Fatal(msg);

这样记录日志。
我这里写了个入口LogWriter用于统一调用,方便以后修改日志或者切换其他日志。


日志的配置文件为NLog.config,NLog的配置可以放在Web.config中,也可以放在单独的文件中,这里为了项目好维护,把配置放到一个单独的文件中,具体配置的内容为:

<?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" throwExceptions="true"><targets xsi:type="AsyncWrapper"><!--保存至文件--><target name="log_file" xsi:type="File" fileName="${basedir}/Logs/${shortdate}/${level:uppercase=false:padding=-5}.txt"layout="${longdate} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" /><!--输出至Debugger--><target name="debugger" xsi:type="Debugger" layout="NLog: ${date:format=HH\:mm\:ss} | ${message}" /><!--输出至控制台--><target name="console" xsi:type="ColoredConsole" layout="${longdate} ${message} ${exception:format=tostring}"></target><!--输出至邮件--><target xsi:type="Mail" name="infoMail"smtpServer="smtp.163.com"  smtpPort="25"  smtpAuthentication="Basic"  smtpUserName="deno@163.com"   smtpPassword="demo"  enableSsl="true"  addNewLines="true"  from="demo@163.com"  to="demo@qq.com"  subject="Project Exception Mail"header="*********************"  body="${longdate} | ${message} "footer="*********************"/></targets><rules><logger name="*" level="Info" writeTo="log_file" /><logger name="*" levels="Error" writeTo="log_file" /><logger name="*" levels="Debug" writeTo="log_file" /><!--<logger name="*" level="Debug" writeTo="debugger" />--><!--<logger name="*" level="Fatal" writeTo="console" />--><logger name="*" level="Fatal" writeTo="log_file" /><!--<logger name="*" level="Warn" writeTo="infoMail" />--><logger name="*" level="Warn" writeTo="log_file" /></rules>
</nlog>

好了,这样就可以使用NLog来记录日志了。

这篇关于NLog日志封装和配置(C#)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144013

相关文章

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据