NetCore2.x 使用Log4Net(一)
前言:本章僅僅是Log4Net的基本簡單的運用,后續章節會按照我的項目使用情況進行深入研究
1.項目搭建
- 新建一個基于.netCore2.x的Web項目? ? ? ? ? =>? ?過程略
- 給新建項目安裝log4net包(NuGet安裝 )? => 過程略
2.添加配置文件 log4Net.config
?配置文件路徑暫時就放在根目錄,我怕到時候讀取不到(盡量少給自己找事)
2.1 配置文件內容
<?xml version="1.0" encoding="utf-8"?> <configuration><log4net><root><level value="ALL" /><appender-ref ref="RollingFile" /></root><appender name="RollingFile" type="log4net.Appender.RollingFileAppender"><!--文件路徑 如果不設置(去掉 value="Log")會默認保存到[App_Data]文件夾中--><param name="File" value="Log"/><!--追加到文件--><param name="AppendToFile" value="true"/><!--最多保留的文件數,設為"-1"則不限--><param name="MaxSizeRollBackups" value="365"/><!--寫到一個文件--><param name="StaticLogFileName" value="false"/><!--文件名,按日期命名--><param name="DatePattern" value="yyyyMMdd".log""/><!--創建日志文件的方式,可選值:Date[日期],文件大小[Size],混合[Composite]--><param name="RollingStyle" value="Date"/><!--日志格式--><layout type="log4net.Layout.PatternLayout"><!--%newline輸出的日志會換行 [%date{HH:mm:ss fff}]表示記錄的時間 --><conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" /><!--如果想自己設置格式就只需要--><!--<conversionPattern value="%message"/>--></layout></appender></log4net> </configuration>ps:看不懂沒關系,先用起來再說,沒有直觀體驗,說了沒有用
2.2? 注冊Log4Net服務
- 實現方式一
這是我看了網上大多數實現方式,是在 Startup.cs 中創建一個靜態變量 ,然后在其它類中調用這個靜態方法獲取Log對象,如下:
public class Startup{public static ILoggerRepository repository { get; set; }public Startup(IConfiguration configuration){Configuration = configuration;repository = LogManager.CreateRepository("NETCoreRepository");// 指定配置文件XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));}}public class HomeController : Controller{private ILog log;public HomeController(IHostingEnvironment hostingEnv){this.log = LogManager.GetLogger(Startup.repository.Name, typeof(HomeController));}public IActionResult Index(){log.Error("測試日志");return View();}}
ps: 我在想,既然都在使用netcore 為啥不將 ILog 注入的服務中,構造函數注入直接獲得呢。其實最大的可能就是在獲取 Log實例的時候傳入一個參數 typeof(HomeController),請移駕到該博客
??https://blog.csdn.net/lixwjava/article/details/45950559
在我的項目中,會對寫日志進行二次封裝,對輸出格式會有一定規定,所以,我會將Log 直接注入service中,如何封裝將在后續博客中詳細分析。
- 實現方式二
在 Startup.cs 文件的 ConfigureServices 方法中添加代碼,結果如下
public void ConfigureServices(IServiceCollection services){services.Configure<CookiePolicyOptions>(options =>{// This lambda determines whether user consent for non-essential cookies is needed for a given request.options.CheckConsentNeeded = context => true;options.MinimumSameSitePolicy = SameSiteMode.None;});var repository = LogManager.CreateRepository("NETCoreLogRepository");XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));services.AddSingleton<ILog>(LogManager.GetLogger(repository.Name, typeof(Startup)));}創建分為三步:
a.創建一個Log4Net 倉庫? repository
b.指定該倉庫的配置文件路徑
c.創建一個Log 實例 注入到 Service中
2.2? 使用方法
項目中需要寫日志的地方直接構造函數注入,代碼如下:
public class HomeController : Controller{public readonly ILog _log;public HomeController(ILog log){_log = log;_log.Info("This is Info Info");}}? 以上,最簡單的使用方式。下篇將介紹如何根據不同日志等級寫入不同的文件中。
后記:后來想了一想,其實我們可以在將??ILoggerRepository 注入到services中而不是將ILog注入,在使用的地方就可以動態指定typeof,以便跟蹤對象,反正就是不想用靜態變量,如下:
public void ConfigureServices(IServiceCollection services){services.Configure<CookiePolicyOptions>(options =>{// This lambda determines whether user consent for non-essential cookies is needed for a given request.options.CheckConsentNeeded = context => true;options.MinimumSameSitePolicy = SameSiteMode.None;});var repository = LogManager.CreateRepository("NETCoreLogRepository");XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));services.AddSingleton<ILoggerRepository>(repository));}public class HomeController : Controller{public readonly ILog _log;public HomeController(ILoggerRepository repository){ _log = LogManager.GetLogger(repository.Name,typeof(HomeController));_log.Info("This is Info Info");}}?
轉載于:https://www.cnblogs.com/NemoWork/p/11330001.html
總結
以上是生活随笔為你收集整理的NetCore2.x 使用Log4Net(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM-分代垃圾回收器
- 下一篇: Way to configure the