.NET Core 2.0使用NLog
最近研究了一下NLog的使用方式,簡單的入了一下門。
實(shí)現(xiàn)的功能,對于不同的日志,進(jìn)行不同的記錄,分別有系統(tǒng)運(yùn)行日志,和個人在程序中寫的異常日志。發(fā)布之后放在了IIS上。進(jìn)行查看日志的信息
參考了兩篇博客。?
1.http://www.voidcn.com/blog/aojiancc2/article/p-6672009.html2.http://www.cnblogs.com/linezero/p/Logging.html個人覺得還是第一篇寫的詳細(xì)。第二篇可能是大神寫的吧,一些細(xì)節(jié)并沒喲特別的注意到。
那兩篇博客已經(jīng)寫很詳細(xì)了,我再重復(fù)一下,以及提醒一下像我一樣的小菜們,需要注意的事項(xiàng),以及個人在其中的一些疑惑。
首先我們建一個Core 2.0的項(xiàng)目,需要使用Visual Studio 2017 ?15.3,我們需要引入這些包,我們會用到。這是我的*.csproj文件的部分。(在這里需要注意下,如果是Core2.0的項(xiàng)目直接用2.0以上包,不然在vs中運(yùn)行是沒有問題的,在windows環(huán)境中運(yùn)行也是沒有問題的,但是到了Linux中就會出問題,在 restore 時,會給你報(bào)錯,讓你把包升級到2.0以上。這個問題自己原來也沒有注意到,本來想著這些版本控制之類的東西,肯定是向下兼容的??墒乔皟商?#xff0c;在Linux上用docker 進(jìn)行測試發(fā)布的時候就出現(xiàn)了這個問題。)
<ItemGroup>
? ? <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0-preview1-final" />
? ? <PackageReference Include="NLog" Version="5.0.0-beta09" />
? ? <PackageReference Include="NLog.Web.AspNetCore" Version="4.4.1" />
? ? <PackageReference Include="System.Text.Encoding.CodePages" Version="4.3.0" />
? </ItemGroup>
添加下邊的代碼
public void Configure(IApplicationBuilder app, IHostingEnvironment env ,ILoggerFactory loggerFactory)
? ? ? ? {
? ? ? ? ? ? Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//這是為了防止中文亂碼
? ? ? ? ? ? loggerFactory.AddNLog();//添加NLog
? ? ? ? ? ? env.ConfigureNLog("nlog.config");//讀取Nlog配置文件
? ? ? ? ? ?//other Code
? ? ? ? }
在ConfigServie方法中不需要進(jìn)行依賴注入的配置
由于這里我們添加了讀取Nlog的配置文件的信息
所以我們要添加“nlog.config的文件”
新建一個 xml文件 名稱為 你的?env.ConfigureNLog("nlog.config");里邊穿的字符串參數(shù)的名稱。
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? autoReload="true"
? ? ? internalLogLevel="Warn"
? ? ? internalLogFile="internal-nlog.txt">
? <!--define various log targets-->
? <targets>
? ? <!--write logs to file-->
? ? <target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log"
? ? ? ? ? ? ? ? ?layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
? ? <target xsi:type="File" name="ownFile-web" fileName="nlog-my-${shortdate}.log"
? ? ? ? ? ? ? ? ?layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
? ? <target xsi:type="Null" name="blackhole" />
? </targets>
? <rules>
? ? <!--All logs, including from Microsoft-->
? ? <logger name="*" minlevel="Trace" writeTo="allfile" />
? ? <!--Skip Microsoft logs and so log only own logs-->
? ? <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
? ? <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
? </rules>
</nlog>
在HomeControler中進(jìn)行如下修改(我結(jié)合了他們兩個人的用法)
public class HomeController : Controller
? ? {
? ? ? ? private readonly ILogger<HomeController> _logger;
? ? ? ? static Logger Logger = LogManager.GetCurrentClassLogger();
? ? ? ? public HomeController(ILogger<HomeController> logger)
? ? ? ? {
? ? ? ? ? ? this._logger = logger;
? ? ? ? }
? ? ? ? public IActionResult Index()
? ? ? ? {
? ? ? ? ? ? Logger.Info("普通信息日志-----------");
? ? ? ? ? ? Logger.Debug("調(diào)試日志-----------");
? ? ? ? ? ? Logger.Error("錯誤日志-----------");
? ? ? ? ? ? Logger.Fatal("異常日志-----------");
? ? ? ? ? ? Logger.Warn("警告日志-----------");
? ? ? ? ? ? Logger.Trace("跟蹤日志-----------");
? ? ? ? ? ? Logger.Log(NLog.LogLevel.Warn, "Log日志------------------");
? ? ? ? ? ? _logger.LogInformation("你訪問了首頁");
? ? ? ? ? ? _logger.LogWarning("警告信息");
? ? ? ? ? ? _logger.LogError("錯誤信息");
? ? ? ? ? ?// _logger.LogDebug(NLog.LogLevel.Fatal, "NLog 致命日志");
? ? ? ? ? ? return View();
? ? ? ? }
}
可能有人會疑問:構(gòu)造函數(shù)中的logger是怎么穿進(jìn)去的,沒有進(jìn)行依賴注入。它是通過app.addNlog()。進(jìn)行注入的。
之后我們修改一下我們的appsetting.json文件,把其中的日志級別調(diào)整為Information的。默認(rèn)是Debug的
{
? "Logging": {
? ? "IncludeScopes": false,
? ? "Debug": {
? ? ? "LogLevel": {
? ? ? ? "Default": "Information"
? ? ? }
? ? },
? ? "Console": {
? ? ? "LogLevel": {
? ? ? ? "Default": "Information"
? ? ? }
? ? }
? }
}
這時候我們直接運(yùn)行F5在/bin/Debug/netcoreapp2.0文件夾下是看不到日志文件的,在我們的項(xiàng)目的根目錄下打開dos窗口。dotnet restore 一下,然后dotnet run 一下訪問一下那個地址,之后再進(jìn)入那個文件夾就可以看到日志文件了。
對這兩個文件進(jìn)行說明一下,第一個是網(wǎng)站運(yùn)行時所有的日志記錄,第二個只是有我們自己寫的異常日志記錄。
由于我要放在iis上,所以我要發(fā)布一下,在VS中直接發(fā)布也行,用 dotnet publish 進(jìn)行發(fā)布也可以我用的是第一種,發(fā)布完成之后。這個時候我們?nèi)绻苯舆\(yùn)行的話,是沒有辦法運(yùn)行原因是發(fā)布的時候。沒有將我們寫的nlog.config 文件放在發(fā)布的目錄中去,我們需要手動的將這個文件復(fù)制到我們的發(fā)布的目錄中。
之后設(shè)置一下發(fā)布的這個文件夾的權(quán)限,把Everyone這個角色添加進(jìn)去,并給它讀寫的權(quán)限。
之后在iis上綁定這個發(fā)布的目錄,在應(yīng)用程序池中把剛才綁定到iis上的網(wǎng)站,改為無托管模式。之后將網(wǎng)站重新啟動一下,在瀏覽器中運(yùn)行輸入你綁定的域名??梢灾苯釉L問這個網(wǎng)址了。
如果出現(xiàn)一下錯誤。請先進(jìn)入發(fā)布程序的那個文件夾,執(zhí)行一下dotnet run 如果項(xiàng)目可以成功運(yùn)行,請檢查一下everyone是否有讀寫的權(quán)限,重啟一下iis服務(wù)器。如果都不行,請重新publish。就可以解決這個問題。
這是我運(yùn)行之后的生成的日志文件目錄是publishoutput
原文地址:http://www.cnblogs.com/qulianqing/p/7222177.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的.NET Core 2.0使用NLog的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 体验 PHP under .NET Co
- 下一篇: ASP.NET Core - 关于标签帮