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

相关文章

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指