Open-source Tutorial

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;
        }
    }
}
原文地址:https://www.cnblogs.com/zdfffg/p/10184128.html