首页 / .NET Core / 正文

DncZeus & log4net

2127 发布于: 2019-05-07 读完约需19分钟

依赖库

如题, 自然是依赖 log4net.

不过为了更好的在 ASP.NET Core 集成使用, 我们这里使用 Microsoft.Extensions.Logging.Log4Net.AspNetCore, 以便依赖注入使用.

项目中通过 NuGet 安装完成后, 我们看看依赖项:

同时在 *.csproj 文件中会多出相关的依赖项配置:

配置

依赖库下载安装完成后, 我们来如何使用呢?

我们在 Startup.cs 中补充如下代码:

// Startup.cs
using Microsoft.Extensions.Logging; 

namespace DncZeus.Api
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            // 日志
            services.AddLogging(config => 
            {
                config.AddLog4Net();
            });
        }
    }
}

这个时候我们直接运行项目, 会发现出现如下报错:

这是因为默认的 AddLog4Net() 方法会从当前目录读取 log4net.config 配置文件内的信息.

所以我们还需要一个 log4net.config 配置文件.

项目内新建一个 log4net.config 配置文件, 并调整属性为 始终复制, 这样每次编译/发布时会自动拷贝到最终生成目录下, 不用我们手搓操作.

同时调整 log4net.config 配置文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<log4net debug="false">
  <root>
    <level value="ALL" />
    <appender-ref ref="DebugLogAppender" />
    <appender-ref ref="InfoLogAppender" />
    <appender-ref ref="WarnLogAppender" />
    <appender-ref ref="ErrorLogAppender" />
  </root>
  <appender name="DebugLogAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value=".\\logs\\" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <param name="AppendToFile" value="true" />
    <param name="MaxSizeRollBackups" value="10" />
    <param name="MaximumFileSize" value="200KB" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd&quot;-Debug.txt&quot;" />
    <param name="RollingStyle" value="Composite" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="DEBUG" />
      <levelMax value="DEBUG" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n" />
    </layout>
  </appender>
  <appender name="InfoLogAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value=".\\logs\\" />
    <param name="AppendToFile" value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="MaximumFileSize" value="5000KB" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd&quot;-Info.txt&quot;" />
    <param name="CountDirection" value="1" />
    <param name="RollingStyle" value="Composite" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="INFO" />
      <levelMax value="INFO" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n" />
    </layout>
  </appender>
  <appender name="WarnLogAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value=".\\logs\\" />
    <param name="AppendToFile" value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="MaximumFileSize" value="5000KB" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd&quot;-Warning.txt&quot;" />
    <param name="CountDirection" value="1" />
    <param name="RollingStyle" value="Composite" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="WARN" />
      <levelMax value="WARN" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n" />
    </layout>
  </appender>
  <appender name="ErrorLogAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value=".\\logs\\" />
    <param name="AppendToFile" value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="MaximumFileSize" value="5000KB" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd&quot;-Error.txt&quot;" />
    <param name="RollingStyle" value="Composite" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="ERROR" />
      <levelMax value="FATAL" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n" />
    </layout>
  </appender>
</log4net>

这个时候再运行项目就没什么问题了.

使用

配置可以了, 那么我们如何使用呢?

这里我们新建一个测试控制器 TestController.cs, 并修改代码如下:

// TestController.cs
using DncZeus.Api.Extensions;
using DncZeus.Api.Models.Response;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860

namespace DncZeus.Api.Controllers
{
    /// <summary>
    /// 测试控制器
    /// </summary>
    [ApiController]
    [Route("[controller]/[action]")]
    public class TestController : Controller
    {
        private readonly ILogger _logger;

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

        /// <summary>
        /// 测试日志
        /// </summary>
        /// <returns></returns>
        // GET: /<controller>/
        public IActionResult Logger()
        {
            _logger.LogDebug(message: "LogDebug()...");
            _logger.LogInformation(message: "LogInformation()...");
            _logger.LogWarning(message: "LogWarning()...");
            _logger.LogError(message: "LogError()...");
            ResponseResultModel response = ResponseModelFactory.CreateResultInstance;
            response.SetSuccess(message: "test logger success");
            return Ok(value: response);
        }
    }
}

运行并访问 http://localhost:54321/test/logger

可以在 logs 目录下看到如下内容:

同理在其他控制器内也可以这样使用咯.

码完收工.

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: C#/.NET应用程序开发中如何使用Entity Framework(EF)实现快速批量插入大量数据到SQL Server数据库?

下一篇: 微软公布全新Windows终端(Windows Terminal)管理工具

本文永久链接码友网 » DncZeus & log4net

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册