# DMS日志服务使用说明

## 概述

DMS项目现在支持Microsoft.Extensions.Logging.ILogger接口的日志服务：
1. NLogLogger类直接实现Microsoft.Extensions.Logging.ILogger接口（位于DMS.WPF项目中）
2. 提供ILoggerFactory用于创建命名的Logger实例（位于DMS.WPF项目中）

## 如何注册日志服务

在`Startup.cs`或程序的依赖注入配置中，使用以下扩展方法注册日志服务：

```csharp
using DMS.Application;

// 在ConfigureServices方法中
services.AddDmsServices();
```

这将注册以下服务：
- `Microsoft.Extensions.Logging.ILogger` 接口及其实现 `NLogLogger`（单例，位于DMS.WPF.Logging命名空间）
- `Microsoft.Extensions.Logging.ILoggerFactory` 接口及其实现 `NLogLoggerFactory`（单例，位于DMS.WPF.Logging命名空间）

## 如何使用日志服务

### 1. 使用构造函数注入ILogger（推荐）

```csharp
using Microsoft.Extensions.Logging;

public class MyService
{
    private readonly ILogger<MyService> _logger;

    public MyService(ILogger<MyService> logger)
    {
        _logger = logger;
    }

    public void DoSomething()
    {
        _logger.LogInformation("正在执行操作...");
        
        try
        {
            // 业务逻辑
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "操作失败");
        }
    }
}
```

### 2. 使用ILoggerFactory创建命名的Logger

```csharp
using Microsoft.Extensions.Logging;

public class MyService
{
    private readonly ILogger _logger;

    public MyService(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger("MyService");
    }

    public void DoSomething()
    {
        _logger.LogInformation("正在执行操作...");
        
        try
        {
            // 业务逻辑
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "操作失败");
        }
    }
}
```

## NLogLoggerFactory的作用

`NLogLoggerFactory`是`ILoggerFactory`接口的实现，主要作用是：

1. **创建命名的Logger实例**：通过`CreateLogger(string categoryName)`方法，可以为不同的类或模块创建具有特定名称的Logger实例
2. **支持依赖注入**：作为服务注册后，其他类可以通过构造函数注入`ILoggerFactory`来创建Logger实例
3. **符合标准**：实现Microsoft.Extensions.Logging标准，确保与其他.NET日志组件兼容

## 日志级别映射

Microsoft.Extensions.Logging与NLog之间的日志级别映射如下：

| Microsoft.Extensions.Logging | NLog     |
|-----------------------------|----------|
| Trace                       | Trace    |
| Debug                       | Debug    |
| Information                 | Info     |
| Warning                     | Warn     |
| Error                       | Error    |
| Critical                    | Fatal    |

## 节流功能

NLogLogger提供了节流功能，以防止在短时间内产生大量重复的日志（日志风暴）。默认情况下，所有日志都会启用节流，节流时间窗口为30秒。

## 配置

NLog的配置文件位于 `DMS.Core\Configurations\nlog.config`，可以根据需要进行修改。