demoshop

demo, trying to be the best_

NLog 也丟到 Slack 吧

在昨天 twMVC 每週四固定聚會時,不知道怎麼聊的扯到了 Slack 顯示 NLog 的需求,我就說我有寫過結果立即被吐槽說我只有寫 Elmah 的,原來我藏招藏了那麼久.....

回到家以後我就再想,為什麼會沒有寫這篇呢?才想到原因,當初覺得這只是套件的應用,並沒有太多的技術門檻所以就沒寫出來了,但既然有人問了那我還是好人做到底,寫一篇文讓有需要的朋友可以按圖施工,保證成功。

為了避免一切繁雜的情境,就直接開一個新的 MVC 專案來當範例吧,開啟 MVC 專案後直接使用 NuGet 搜尋「Nlog.Slack」


安裝的時候會連同相依性套件一併安裝,所以 NLog 也會一起加進來


不過該套件相依的 NLog 只有 3.x 為了求新求變 demo 會將 NLog 升級到最新版(請使用 NuGet),同時請一併安裝 NLog.Config 這樣就可以省去自己建立 config 檔案的麻煩


套件的部分結束了,再來請前往 Slack 網站增加 Incoming WebHooks 「傳送門


選擇要拿來當 Log 的頻道(本範例使用 #test)


Slack會提供一個 Webhook URL 請完整複製


再來開啟 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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false">


  <variable name="myvar" value="myvalue"/>
  <extensions>
    <add assembly="NLog.Slack" />
  </extensions>


 <targets async="true">
    <target xsi:type="Slack"
            name="slackTarget"
            layout="${message}"
            webHookUrl="https://hooks.slack.com/services/XXXXXX/XXXXX/XXXXXX"
            channel="#test"
            username="demoshop"
            compact="false"
            icon=":ghost:" />
  </targets>


  <rules>
    <logger name="*" minlevel="Debug" writeTo="slackTarget" />
  </rules>
</nlog>

請注意其中 channel 必須是你的頻道名稱,本範例為 test


到這裡就全部設定完畢了,您可以利用以下的範例語法來測試看看 Slack 有沒有正常反應

public ActionResult Index()
{
    var logger = NLog.LogManager.GetCurrentClassLogger();
    logger.Info("http://skilltree.my 業界師資,實戰教學");
    return View();
}

就是這樣的簡單,純粹的套件與服務應用而已,當然 NLog 可以塞什麼、Slack 還可以幹什麼、範例語法太蠢的這些問題都不是本篇注重的點,請各位自行去研究與調整了。

 

 

 

回應討論