.net Core 2.0使用NLog

最近研究了一下NLog的使用方式,簡單的入了一下門。html

實現的功能,對於不一樣的日誌,進行不一樣的記錄,分別有系統運行日誌,和我的在程序中寫的異常日誌。發佈以後放在了IIS上。進行查看日誌的信息web

參考了兩篇博客。 docker

1.http://www.voidcn.com/blog/aojiancc2/article/p-6672009.html
2.http://www.cnblogs.com/linezero/p/Logging.html

我的以爲仍是第一篇寫的詳細。第二篇多是大神寫的吧,一些細節並沒喲特別的注意到。json

那兩篇博客已經寫很詳細了,我再重複一下,以及提醒一下像我同樣的小菜們,須要注意的事項,以及我的在其中的一些疑惑。windows

首先咱們建一個Core 2.0的項目,因爲目前2.0 沒有正式發佈,若是想用2.0 須要裝preview版的vs 瀏覽器

咱們須要引入這些包,咱們會用到。這是個人*.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>

打開咱們的startUp.cs 文件app

添加下邊的代碼ide

        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");裏邊穿的字符串參數的名稱。

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
 3       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4       autoReload="true"
 5       internalLogLevel="Warn"
 6       internalLogFile="internal-nlog.txt">
 7 
 8   <!--define various log targets-->
 9   <targets>
10 
11     <!--write logs to file-->
12     <target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log"
13                  layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
14 
15     <target xsi:type="File" name="ownFile-web" fileName="nlog-my-${shortdate}.log"
16                  layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
17 
18     <target xsi:type="Null" name="blackhole" />
19 
20   </targets>
21 
22   <rules>
23     <!--All logs, including from Microsoft-->
24     <logger name="*" minlevel="Trace" writeTo="allfile" />
25 
26     <!--Skip Microsoft logs and so log only own logs-->
27     <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
28     <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
29   </rules>
30 
31 
32 </nlog>
nlog.config

在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

相關文章
相關標籤/搜索