.NET Core 2.0使用NLog
最近研究了一下NLog的使用方式,簡單的入了一下門。
實現的功能,對于不同的日志,進行不同的記錄,分別有系統運行日志,和個人在程序中寫的異常日志。發布之后放在了IIS上。進行查看日志的信息
參考了兩篇博客。?
1.http://www.voidcn.com/blog/aojiancc2/article/p-6672009.html2.http://www.cnblogs.com/linezero/p/Logging.html個人覺得還是第一篇寫的詳細。第二篇可能是大神寫的吧,一些細節并沒喲特別的注意到。
那兩篇博客已經寫很詳細了,我再重復一下,以及提醒一下像我一樣的小菜們,需要注意的事項,以及個人在其中的一些疑惑。
首先我們建一個Core 2.0的項目,需要使用Visual Studio 2017 ?15.3,我們需要引入這些包,我們會用到。這是我的*.csproj文件的部分。(在這里需要注意下,如果是Core2.0的項目直接用2.0以上包,不然在vs中運行是沒有問題的,在windows環境中運行也是沒有問題的,但是到了Linux中就會出問題,在 restore 時,會給你報錯,讓你把包升級到2.0以上。這個問題自己原來也沒有注意到,本來想著這些版本控制之類的東西,肯定是向下兼容的。可是前兩天,在Linux上用docker 進行測試發布的時候就出現了這個問題。)
<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方法中不需要進行依賴注入的配置
由于這里我們添加了讀取Nlog的配置文件的信息
所以我們要添加“nlog.config的文件”
新建一個 xml文件 名稱為 你的?env.ConfigureNLog("nlog.config");里邊穿的字符串參數的名稱。
<?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中進行如下修改(我結合了他們兩個人的用法)
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("調試日志-----------");
? ? ? ? ? ? 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();
? ? ? ? }
}
可能有人會疑問:構造函數中的logger是怎么穿進去的,沒有進行依賴注入。它是通過app.addNlog()。進行注入的。
之后我們修改一下我們的appsetting.json文件,把其中的日志級別調整為Information的。默認是Debug的
{
? "Logging": {
? ? "IncludeScopes": false,
? ? "Debug": {
? ? ? "LogLevel": {
? ? ? ? "Default": "Information"
? ? ? }
? ? },
? ? "Console": {
? ? ? "LogLevel": {
? ? ? ? "Default": "Information"
? ? ? }
? ? }
? }
}
這時候我們直接運行F5在/bin/Debug/netcoreapp2.0文件夾下是看不到日志文件的,在我們的項目的根目錄下打開dos窗口。dotnet restore 一下,然后dotnet run 一下訪問一下那個地址,之后再進入那個文件夾就可以看到日志文件了。
對這兩個文件進行說明一下,第一個是網站運行時所有的日志記錄,第二個只是有我們自己寫的異常日志記錄。
由于我要放在iis上,所以我要發布一下,在VS中直接發布也行,用 dotnet publish 進行發布也可以我用的是第一種,發布完成之后。這個時候我們如果直接運行的話,是沒有辦法運行原因是發布的時候。沒有將我們寫的nlog.config 文件放在發布的目錄中去,我們需要手動的將這個文件復制到我們的發布的目錄中。
之后設置一下發布的這個文件夾的權限,把Everyone這個角色添加進去,并給它讀寫的權限。
之后在iis上綁定這個發布的目錄,在應用程序池中把剛才綁定到iis上的網站,改為無托管模式。之后將網站重新啟動一下,在瀏覽器中運行輸入你綁定的域名。可以直接訪問這個網址了。
如果出現一下錯誤。請先進入發布程序的那個文件夾,執行一下dotnet run 如果項目可以成功運行,請檢查一下everyone是否有讀寫的權限,重啟一下iis服務器。如果都不行,請重新publish。就可以解決這個問題。
這是我運行之后的生成的日志文件目錄是publishoutput
原文地址:http://www.cnblogs.com/qulianqing/p/7222177.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的.NET Core 2.0使用NLog的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 体验 PHP under .NET Co
- 下一篇: ASP.NET Core - 关于标签帮