前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为.Net core 加入日志功能

为.Net core 加入日志功能

原创
作者头像
谭广健
修改2021-03-04 17:59:42
4720
修改2021-03-04 17:59:42
举报
文章被收录于专栏:谭广健的专栏谭广健的专栏

前文再续,书接上一篇;话说上一篇,我们已经顺利将.Net Core的框架应用部署到IS上,但在实际使用中发现出现很多小问题,又不知道是哪个环境出问题;于是想查一下问题,而发现这个框架的日志只保留登陆的信息,对出错信息没有保存。并且日志是直接写数据库,这样个人感觉不是太好。于是自己动手加入日志功能。加入日志功能不外乎Log4Net这个已经用得比较烂,于是不走平常路用另一个老牌的日志插件Nlog,至于Nlog有什么优缺点,我这里就不多说,自己百度。我们接下来说说怎么整合。

1、通过控制台命令进行安装: Install-Package Nlog

2、加入Config:Install-Package Nlog.Config(也可以自己在目录建立)

这个Nlog.Config主要是Nlog的设置,如果自己建立,可以按我以下的内容;

代码语言:javascript
复制
<?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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="logs/nlog-internal.log">

	<variable name="myvar" value="myvalue"/>

	<targets async="true">
		<!--Error保存至文件-->
		<target name="error_file" xsi:type="File" maxArchiveFiles="30"  encoding="utf-8"
				fileName="${basedir}/Logs/${date:yyyyMMdd}_Error.log"
				archiveFileName="${basedir}/Logs/${date:yyyyMMdd}_Error.{#}.log"
				archiveDateFormat="yyyyMMdd"
				archiveAboveSize="104857600"
				archiveNumbering="Sequence"
				layout="${date:yyyy-MM-dd HH\:mm\:ss} ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace}" />
		<!--Trace保存至文件-->
		<target name="trace_file" xsi:type="File" maxArchiveFiles="30" encoding="utf-8"
				fileName="${basedir}/Logs/${date:yyyyMMdd}_Trace.log"
				archiveFileName="${basedir}/Logs/${date:yyyyMMdd}_Trace.{#}.log"
				archiveDateFormat="yyyyMMdd"
				archiveAboveSize="104857600"
				archiveNumbering="Sequence"
				layout="${date:yyyy-MM-dd HH\:mm\:ss} ${appdomain} | ${uppercase:${level}}: ${message}" />
		<!--API保存至文件-->
		<target name="api_file" xsi:type="File" maxArchiveFiles="30" encoding="utf-8"
				fileName="${basedir}/Logs/${date:yyyyMMdd}_api.log"
				archiveFileName="${basedir}/Logs/${date:yyyyMMdd}_api.{#}.log"
				archiveDateFormat="yyyyMMdd"
				archiveAboveSize="104857600"
				archiveNumbering="Sequence"
				layout="${date:yyyy-MM-dd HH\:mm\:ss} ${appdomain} | ${uppercase:${level}}: ${message}" />
	</targets>

	<rules>
		<logger name="*" minlevel="Debug" writeTo="api_file" />
		<logger name="*" minlevel="Trace" maxlevel="Warn" writeTo="trace_file" />
		<logger name="*" minlevel="Error" writeTo="error_file" />
		
	</rules>
</nlog>

3、建立一个调用的类,方便调用,内容如下:

代码语言:javascript
复制
using NLog;
using NLog.Config;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace MVVM.CommonUtils
{
    public enum LogType
    {
        [Description("网站")]
        Web,
        [Description("数据库")]
        DataBase,
        [Description("Api接口")]
        ApiRequest,
        [Description("中间件")]
        Middleware
    }
    public static class NLogUtil
    {      
        public static Logger fileLogger = LogManager.GetLogger("logfile");      
        /// <summary>
        /// 写日志到文件
        /// </summary>
        /// <param name="logLevel">日志等级</param>
        /// <param name="logType">日志类型</param>
        /// <param name="message">信息</param>
        /// <param name="exception">异常</param>
        public static void WriteFileLog(LogLevel logLevel, LogType logType, string message, Exception exception = null)
        {            
            LogEventInfo theEvent = new LogEventInfo(logLevel, fileLogger.Name, message);
            theEvent.Properties["LogType"] = logType.ToString();
            theEvent.Exception = exception;
            fileLogger.Log(theEvent);            
        }
    }
}

4、就是程序中调用:

代码语言:javascript
复制
NLogUtil.WriteFileLog(NLog.LogLevel.Info, LogType.ApiRequest, "成功写入");

这样就会自动生成相关的日志,有个地方友情提醒一下,记得将NLog.Config中的复制到输出目录,选择“始终复制”。至于更多的功能可以自己去研究一下,这里只是当个入门。

如果有什么疑问可以留意共同研究~最后记得点个赞。。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档