首先去Nuget中安裝Log4Net包
安裝:log4net
安裝:Microsoft.Extensions.Logging.Console
安裝:Microsoft.Extensions.Logging.Log4Net.AspNetCore
方式一
Program.cs文件
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
namespace NetCoreApp
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();//CreateWebHostBuilder啓動了Kestrel服務器,這個服務器負責監聽--轉發--響應客戶端請求(這樣就不需要IIS來負責監聽,轉發,響應客戶端請求了,IIS就只做反向代理就行了)
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((context, loggingbuilder) =>
{
//該方法需要引入Microsoft.Extensions.Logging名稱空間
loggingbuilder.AddFilter("System", LogLevel.Warning); //過濾掉系統默認的一些日誌
loggingbuilder.AddFilter("Microsoft", LogLevel.Warning);//過濾掉系統默認的一些日誌
//添加Log4Net
//var path = Directory.GetCurrentDirectory() + "\\log4net.config";
//不帶參數:表示log4net.config的配置文件就在應用程序根目錄下,也可以指定配置文件的路徑
loggingbuilder.AddLog4Net();
})
.UseStartup<Startup>();
}
}
控制器中使用
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace NetCoreApp.Controllers
{
public class HomeController : Controller
{
//ILoggerFactory和ILogger都是系統內置的接口,它們兩個都可以寫日誌,隨便你用哪個都行
public ILoggerFactory _Factory = null;
public ILogger<HomeController> _logger = null;
//注意:ILoggerFactory的命名空間是Microsoft.Extensions.Logging;
public HomeController(ILoggerFactory factory, ILogger<HomeController> logger)
{
this._Factory = factory;
this._logger = logger;
}
public IActionResult Index()
{
var msg = _user.Sum();
this._Factory.CreateLogger<HomeController>().LogError("這裏出現了一個錯誤");
this._logger.LogError("出現了嚴重的錯誤!");
return Content("OK");
}
}
}
log4net.config 配置文件 注意:這個配置文件的最外層用 <log4net>包裹的 ;配置文件直接放在了項目根目錄下
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="RollingAppender" type="log4net.Appender.RollingFileAppender">
<!--指定日誌文件保存的目錄-->
<file value="log\log.txt"/>
<!--追加日誌內容-->
<appendToFile value="true"/>
<!--可以爲:Once|Size|Date|Composite-->
<!--Compoosite爲Size和Date的組合-->
<rollingStyle value="Composite"/>
<!--設置爲true,當前最新日誌文件名永遠爲file字節中的名字-->
<staticLogFileName value="false"/>
<!--當備份文件時,備份文件的名稱及後綴名-->
<datePattern value="yyyyMMdd.TXT"/>
<!--日誌最大個數-->
<!--rollingStyle節點爲Size時,只能有value個日誌-->
<!--rollingStyle節點爲Composie時,每天有value個日誌-->
<maxSizeRollBackups value="20"/>
<!--可用的單位:KB|MB|GB-->
<maximumFileSize value="5MB"/>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ALL"/>
<param name="LevelMax" value="FATAL"/>
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
</appender>
<root>
<priority value="ALL"/>
<level value="ALL"/>
<appender-ref ref="RollingAppender"/>
</root>
</log4net>
方式二
Startup文件
public class Startup
{
//爲StartUp.cs添加屬性
public static ILoggerRepository repository { get; set; }
public IConfiguration Configuration { get; } //構造函數注入:Configuration用於讀取配置文件的
public Startup(IConfiguration configuration)
{
Configuration = configuration;
repository = LogManager.CreateRepository("NetCoreApp"); //我的項目名稱叫NetCoreApp
//指定配置文件
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
}
}
控制器中使用
using log4net;
using Microsoft.AspNetCore.Mvc;
namespace NetCoreApp.Controllers
{
public class HomeController : Controller
{
private ILog log;
public HomeController()
{
this.log = LogManager.GetLogger(Startup.repository.Name, typeof(HomeController));
}
public IActionResult Index()
{
log.Error("哈哈,出現錯誤啦");
return Content("OK");
}
}
}
log4net.config配置文件:注意,這個配置文件的最外層用<configuration>包裹的;配置文件直接放在了項目根目錄下
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<log4net>
<appender name="RollingAppender" type="log4net.Appender.RollingFileAppender">
<!--指定日誌文件保存的目錄-->
<file value="log\log.txt"/>
<!--追加日誌內容-->
<appendToFile value="true"/>
<!--可以爲:Once|Size|Date|Composite-->
<!--Compoosite爲Size和Date的組合-->
<rollingStyle value="Composite"/>
<!--設置爲true,當前最新日誌文件名永遠爲file字節中的名字-->
<staticLogFileName value="false"/>
<!--當備份文件時,備份文件的名稱及後綴名-->
<datePattern value="yyyyMMdd.TXT"/>
<!--日誌最大個數-->
<!--rollingStyle節點爲Size時,只能有value個日誌-->
<!--rollingStyle節點爲Composie時,每天有value個日誌-->
<maxSizeRollBackups value="20"/>
<!--可用的單位:KB|MB|GB-->
<maximumFileSize value="5MB"/>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ALL"/>
<param name="LevelMax" value="FATAL"/>
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
</appender>
<root>
<priority value="ALL"/>
<level value="ALL"/>
<appender-ref ref="RollingAppender"/>
</root>
</log4net>
</configuration>