1. Installing NLog
使用 NuGet 程序包管理器安装 NLog。如何使用 NuGet?
遇到问题:我的项目是 .Net Framework 4.0 平台的,虽然 NLog 说明中是支持的,但是使用命令获取 NuGet 包会遇到如下错误:
“NLog”已拥有为“NETStandard.Library”定义的依赖项。
解决办法是安装低版本的 NLog ,我安装的是 4.0.0 的版本(此时最新版是 4.5.11 )。安装方法是在 NuGet 程序包管理器控制台中输入如下命令:
PM> Install-Package NLog -Version 4.0.0
解决办法不应该是使用旧版,事实上NLog最新版是支持 .Net Framework 4.0 版本的,不过需要在项目中添加 packages.config 配置文件,其内容如下:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NLog" version="4.5.11" targetFramework="net40" />
<package id="NLog.Config" version="4.5.11" targetFramework="net40" />
</packages>
这样的方法也能解决其他 NuGet 包的类似问题。
2. Configure NLog Targets for output
只有配置好 NLog Targets,NLog 才会有输出。
配置方法:
项目中添加一个 NLog.config 的xml- 使用 NuGet 程序包管理器安装 NLog.Config。
- 项目的根目录会生成两个文件:NLog.config 和 NLog.xsd
- 将 NLog.config 文件的"复制到输出目录"属性设置为“始终复制”
解释一下为什么要通过 NuGet 程序包管理器安装 NLog.Config ?
这是因为这样会多生成 NLog.xsd 这个文件,这个文件可以让我们在在使用 VS IDE 编辑 NLog.config 这个文件时,提供智能感知,相当方便!
以下是 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">
<targets>
<target name="logfile" xsi:type="File"
fileName="${basedir}/Logs/${shortdate}.txt"
layout="${time} | ${level:uppercase=false} | ${message}"
/>
<target name="logconsole" xsi:type="Console" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logconsole" />
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
遇到问题:忘记设置文件属性,导致无输出。
3. Writing log messages
重新打包,方便调用:
public class NLogHelper
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
public enum LogLevel
{
Trace, Debug, Info, Warn, Error, Fatal
}
public static void WriteLog(string msg, LogLevel level)
{
switch (level)
{
case LogLevel.Trace:
logger.Trace(msg);
break;
case LogLevel.Debug:
logger.Debug(msg);
break;
case LogLevel.Info:
logger.Info(msg);
break;
case LogLevel.Warn:
logger.Warn(msg);
break;
case LogLevel.Error:
logger.Error(msg);
break;
case LogLevel.Fatal:
logger.Fatal(msg);
break;
default:
break;
}
}
}