前文再续,书接上一篇;话说上一篇,我们已经顺利将.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中的复制到输出目录,选择“始终复制”。至于更多的功能可以自己去研究一下,这里只是当个入门。
如果有什么疑问可以留意共同研究~最后记得点个赞。。