NetCore2.x 使用Log4Net(一)
前言:本章僅僅是Log4Net的基本簡單的運用,后續(xù)章節(jié)會按照我的項目使用情況進行深入研究
1.項目搭建
- 新建一個基于.netCore2.x的Web項目? ? ? ? ? =>? ?過程略
- 給新建項目安裝log4net包(NuGet安裝 )? => 過程略
2.添加配置文件 log4Net.config
?配置文件路徑暫時就放在根目錄,我怕到時候讀取不到(盡量少給自己找事)
2.1 配置文件內(nèi)容
<?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"><!--文件路徑 如果不設(shè)置(去掉 value="Log")會默認(rèn)保存到[App_Data]文件夾中--><param name="File" value="Log"/><!--追加到文件--><param name="AppendToFile" value="true"/><!--最多保留的文件數(shù),設(shè)為"-1"則不限--><param name="MaxSizeRollBackups" value="365"/><!--寫到一個文件--><param name="StaticLogFileName" value="false"/><!--文件名,按日期命名--><param name="DatePattern" value="yyyyMMdd".log""/><!--創(chuàng)建日志文件的方式,可選值: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" /><!--如果想自己設(shè)置格式就只需要--><!--<conversionPattern value="%message"/>--></layout></appender></log4net> </configuration>ps:看不懂沒關(guān)系,先用起來再說,沒有直觀體驗,說了沒有用
2.2? 注冊Log4Net服務(wù)
- 實現(xiàn)方式一
這是我看了網(wǎng)上大多數(shù)實現(xiàn)方式,是在 Startup.cs 中創(chuàng)建一個靜態(tài)變量 ,然后在其它類中調(diào)用這個靜態(tài)方法獲取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 注入的服務(wù)中,構(gòu)造函數(shù)注入直接獲得呢。其實最大的可能就是在獲取 Log實例的時候傳入一個參數(shù) typeof(HomeController),請移駕到該博客
??https://blog.csdn.net/lixwjava/article/details/45950559
在我的項目中,會對寫日志進行二次封裝,對輸出格式會有一定規(guī)定,所以,我會將Log 直接注入service中,如何封裝將在后續(xù)博客中詳細(xì)分析。
- 實現(xiàn)方式二
在 Startup.cs 文件的 ConfigureServices 方法中添加代碼,結(jié)果如下
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)));}創(chuàng)建分為三步:
a.創(chuàng)建一個Log4Net 倉庫? repository
b.指定該倉庫的配置文件路徑
c.創(chuàng)建一個Log 實例 注入到 Service中
2.2? 使用方法
項目中需要寫日志的地方直接構(gòu)造函數(shù)注入,代碼如下:
public class HomeController : Controller{public readonly ILog _log;public HomeController(ILog log){_log = log;_log.Info("This is Info Info");}}? 以上,最簡單的使用方式。下篇將介紹如何根據(jù)不同日志等級寫入不同的文件中。
后記:后來想了一想,其實我們可以在將??ILoggerRepository 注入到services中而不是將ILog注入,在使用的地方就可以動態(tài)指定typeof,以便跟蹤對象,反正就是不想用靜態(tài)變量,如下:
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");}}?
轉(zhuǎn)載于:https://www.cnblogs.com/NemoWork/p/11330001.html
總結(jié)
以上是生活随笔為你收集整理的NetCore2.x 使用Log4Net(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM-分代垃圾回收器
- 下一篇: Way to configure the