首先去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>