1.创建webapi项目
打开VS2019->添加新项目【ASP.NET Core Web应用程序】->添加项目名称及位置->【ASP.NET Core Web API】->创建
2.安装log4net依赖包
点击【管理NuGet程序包】->【浏览】安装log4net包、Microsoft.Extensions.Logging.Log4Net.AspNetCore包
3.log4net.config配置文件
log4net.config文件,放到项目根目录
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
<file value=".\Log\Debug.txt" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<!--默认是ExclusiveLock, MinimalLock每次都打开关闭文件。不占用日志文件进程-->
<lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
<datePattern value="yyyyMMdd" />
<countDirection value="1"/>
<maxSizeRollBackups value="-1" />
<!--<maximumFileSize value="10MB" />-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date|%logger|%message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="DEBUG" />
</filter>
</appender>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<file value=".\Log\Error.txt" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<!--默认是ExclusiveLock, MinimalLock每次都打开关闭文件。不占用日志文件进程-->
<lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
<datePattern value="yyyyMMdd" />
<countDirection value="1"/>
<maxSizeRollBackups value="-1" />
<!--<maximumFileSize value="1MB" />-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date|%logger|%message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="ERROR" />
</filter>
</appender>
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<file value=".\Log\Info.txt" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<!--默认是ExclusiveLock, MinimalLock每次都打开关闭文件。不占用日志文件进程-->
<lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
<datePattern value="yyyyMMdd" />
<countDirection value="1"/>
<maxSizeRollBackups value="-1" />
<!--<maximumFileSize value="1MB" />-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date|%logger|%message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="INFO" />
</filter>
</appender>
<appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
<file value=".\Log\Warn.txt" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<!--默认是ExclusiveLock, MinimalLock每次都打开关闭文件。不占用日志文件进程-->
<lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
<datePattern value="yyyyMMdd" />
<countDirection value="1"/>
<maxSizeRollBackups value="-1" />
<!--<maximumFileSize value="1MB" />-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date|%logger|%message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="WARN" />
<levelMax value="WARN" />
</filter>
</appender>
<appender name="FatalAppender" type="log4net.Appender.RollingFileAppender">
<file value=".\Log\Fatal.txt" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<!--默认是ExclusiveLock, MinimalLock每次都打开关闭文件。不占用日志文件进程-->
<lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
<datePattern value="yyyyMMdd" />
<countDirection value="1"/>
<maxSizeRollBackups value="-1" />
<!--<maximumFileSize value="1MB" />-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date|%logger|%message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="FATAL" />
<levelMax value="FATAL" />
</filter>
</appender>
<!--log4net 对于.netcore 本身不支持 AdoNetAppender,此处引用了MicroKnights.Log4NetAdoNetAppender,实现日志入库,
以下注释部分为非.netcore 中的相关配置-->
<!--<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">-->
<!--<appender name="AdoNetAppender" type="MicroKnights.Logging.AdoNetAppender, MicroKnights.Log4NetAdoNetAppender">
<bufferSize value="1" />
<threshold value="ALL"/>
<connectionType value="System.Data.SqlClient.SqlConnection,System.Data.SqlClient,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=127.0.0.1;initial catalog=LogsDataBase;integrated security=false;persist security info=True;User ID=sa;Password=sa123" />
<commandText value="INSERT INTO SysLog_Log4net_tousulog ([LastTime],[LogThread],[LogLevel],[Logger],[LogMessage],[LogException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%exception" />
</layout>
</parameter>
</appender>-->
<root>
<level value="ALL"/>
<appender-ref ref="DebugAppender" />
<appender-ref ref="ErrorAppender" />
<appender-ref ref="InfoAppender" />
<appender-ref ref="WarnAppender" />
<appender-ref ref="FatalAppender" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
4.调用
Program.cs文件
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace wepApi2021
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((logging)=>{
logging.AddLog4Net();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
WeatherForecastController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace wepApi2021.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
_logger.LogInformation("获取数据时写日志。。。");
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
}
5.效果