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

相关文章

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核