配置与扩展


1、配置文件

  通过配置文件可以配置多个日志管理器,通过更换 default 的值即可实现无缝切换。配置文件如下:

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="loggings" type="Fireasy.Common.Logging.Configuration.LoggingConfigurationSectionHandler, Fireasy.Common"/>
    </sectionGroup>
  </configSections>
  <fireasy>
    <loggings default="nlog" level="Debug;Info;Error">
      <logging name="nlog" type="Fireasy.NLog.Logger, Fireasy.NLog" />
      <logging name="log4net" type="Fireasy.LognNet.Logger, Fireasy.Log4net" />
      <logging name="demo" type="demo.Logger, demo" />
    </loggings>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "loggings": {
      "default": "nlog",
      "level": "Debug;Info;Error",
      "settings": {
        "nlog": {
          "type": "Fireasy.NLog.Logger, Fireasy.NLog"
        },
        "log4net": {
          "type": "Fireasy.LognNet.Logger, Fireasy.Log4net"
        },
        "demo": {
          "type": "demo.Logger, demo"
        }
      }
    }
  }
}

  LoggerFactory 工厂类可以根据配置创建一个 ILogger 实例。如下所示:

[TestMethod]
public void TestCreateLogger()
{
    var logger1 = LoggerFactory.CreateLogger();
    Assert.IsNotNull(logger1); // NLogger

    var logger2 = LoggerFactory.CreateLogger("demo");
    Assert.IsNotNull(logger2); // demo
}

  在使用 IOC 的环境中,通过构造注入或属性注入得到的 ILogger 的实例对应的是指向 default 的配置项。


  level 属性配置了启用的日志级别,可以配置多个,支持分号、逗号或竖线分隔。LogEnvironment 类的静态属性 Level 返回了此配置。IsConfigured 方法判断是否配置了某一个级别。基于以上配置,判断是否开启了 Error 级别的日志,如下所示:

[TestMethod]
public void TestIsConfigured()
{
    Assert.IsTrue(LogEnvironment.IsConfigured(LogLevel.Error));
    Assert.IsFalse(LogEnvironment.IsConfigured(LogLevel.Fatal));
}

2、对接 .Net Standard 的日志

  .Net Standard 中提供了 ILogger 接口,用于输出各种级别的日志。使用 StandardNaviteLogger 类可以使用 .Net Standard 的 Logger 接管 Fireasy 的日志。以下是各级别的对应方法:

Fireasy 日志方法 .Net Standard 日志方法
Info LogInformation
Debug LogDebug
Error LogError
Warn LogWarning
Fatal LogCritical

  .Net Core 的配置文件如下:

{
  "fireasy": {
    "loggings": {
      "settings": {
        "netstandard": {
          "type": "Fireasy.Common.Logging.StandardNaviteLogger, Fireasy.Common"
        }
      }
    }
  }
}

3、复合日志

  ComplexLogger 类型的日志管理器可以配置多个分发记录器,将日志同时写到不同的记录器。配置如下所示:

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="loggings" type="Fireasy.Common.Logging.Configuration.LoggingConfigurationSectionHandler, Fireasy.Common"/>
    </sectionGroup>
  </configSections>
  <fireasy>
    <loggings>
      <logging name="complex" type="Fireasy.Common.Logging.ComplexLogger, Fireasy.Common">
        <loggers>
          <logger type="demo.Logger, demo" level="Info,Error" />
          <logger type="Fireasy.NLog.Logger, Fireasy.NLog" />
        </loggers>
      </logging>
    </loggings>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "loggings": {
      "settings": {
        "complex": {
          "type": "Fireasy.Common.Logging.ComplexLogger, Fireasy.Common",
          "loggers": [
            {
              "level": "Info,Error",
              "type": "demo.Logger, demo"
            },
            { 
              "type": "Fireasy.NLog.Logger, Fireasy.NLog"
            }
          ]
        }
      }
    }
  }
}

4、第三方适配