日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NetCore2.x 使用Log4Net(一)

發(fā)布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NetCore2.x 使用Log4Net(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:本章僅僅是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&quot;.log&quot;"/><!--創(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。