NuGit安装 Nlog
Install-Package Nlog
1、Program文件
public class Program
{
public static void Main(string[] args)
{
// 设置读取指定位置的nlog.config文件
NLogBuilder.ConfigureNLog("XmlConfig/nlog.config");
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureLogging(logging =>
{
//logging.ClearProviders(); //移除已经注册的其他日志处理程序
//logging.SetMinimumLevel(LogLevel.Trace); //设置最小的日志级别
}).UseNLog();
}
nlog.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">
<variable name="layout_time_MM" value="${date:format=yyyyMM}" />
<variable name="layout_time_ddHH" value="${date:format=dd-HH}" />
<variable name="layout_time_ss" value="[${date:format=MM-dd HH\:mm\:ss}]" />
<variable name="layout_methodName" value="【${callsite:className=True:fileName=True:methodName=true:includeSourcePath=False}】" />
<variable name="layout_errorcontent" value="${layout_time_ss}:${message} | ${exception} ${stacktrace}" />
<variable name="layout_errorcontent2" value="[${longdate}][${level:uppercase=true:padding=5}] ${message} | ${onexception:${exception:format=message} ${newline} ${stacktrace}" />
<targets>
<!--屏幕打印消息-->
<target name="console" xsi:type="ColoredConsole" layout="[${date:format=HH\:mm\:ss}] ${message}"/>
<!--vs输出窗口 上线删除-->
<!--<target name="vsdebugger" xsi:type="Debugger" layout="[${date:format=HH\:mm\:ss}][${level:padding=5:uppercase=true}] ${message}"/>-->
<!--保存debug至文件 上线删除 -->
<target name="debugger" xsi:type="File" maxArchiveFiles="30"
fileName="${basedir}/Logs/${shortdate}/debug.txt"
layout="[${date:format=HH\:mm\:ss}][${level:padding=5:uppercase=true}] ${message}"/>
<!--保存info至文件 上线删除-->
<target name="info_file" xsi:type="File" maxArchiveFiles="30" fileName="${basedir}/Logs/${shortdate}/info.txt" layout="[${longdate}][${level:uppercase=true:padding=5}] ${message} | ${exception}" />
<!--保存erorr至文件-->
<target name="error_file" xsi:type="File" maxArchiveFiles="30"
fileName="${basedir}/Logs/Error/${layout_time_MM}/${layout_time_ddHH}${event-properties:item=myName}.log"
layout="${layout_errorcontent}" />
<!--保存fatal至文件-->
<target name="fatal_file" xsi:type="File" maxArchiveFiles="30"
fileName="${basedir}/Logs/Fatal/${layout_time_MM}/${layout_time_ddHH}${event-properties:item=myName}.log"
layout="${layout_errorcontent}" />
</targets>
<rules>
<logger name="*" writeTo="console" />
<!--<logger name="*" minlevel="Trace" writeTo="vsdebugger"/>-->
<logger name="*" levels="Debug" writeTo="debugger" />
<logger name="*" levels="Info" writeTo="info_file" />
<logger name="*" levels="Error" writeTo="error_file" />
<logger name="*" levels="Fatal" writeTo="fatal_file" />
</rules>
</nlog>
日志处理类
/// <summary>
/// 日志处理类
/// </summary>
public class LogHelper
{
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
private static string _loggerFileName = "myName";
public static void Debug(object msg, Exception exp = null)
{
if (exp == null)
_logger.Debug("#" + msg);
else
_logger.Debug("#" + msg + " " + exp.ToString());
}
public static void Info(object msg, Exception exp = null)
{
if (exp == null)
_logger.Info("#" + msg);
else
_logger.Info("#" + msg + " " + exp.ToString());
}
public static void Warn(object msg, Exception exp = null)
{
if (exp == null)
_logger.Warn("#" + msg);
else
_logger.Warn("#" + msg + " " + exp.ToString());
}
#region 错误
public static void Error(object msg, Exception exp = null)
{
if (exp == null)
_logger.Error("#" + msg);
else
_logger.Error("#" + msg + " " + exp.ToString());
}
public static void Error(string msg, string myName)
{
LogEventInfo logEvent = new LogEventInfo(LogLevel.Info, _logger.Name, "#" + msg);
logEvent.Properties[_loggerFileName] = " " + myName;
_logger.Log(logEvent);
}
#endregion
}
调用方法
[HttpGet]
public string Error()
{
try
{
var a = "你好";
var b = Convert.ToInt32(a);
}
catch (Exception ex)
{
LogHelper.Error("报错了", ex);
}
return "OK-" + DateTime.Now;
}