簡體   English   中英

NLog 未在 MVC 應用程序中創建日志?

[英]NLog not creating log in MVC application?

我在幾個控制台應用程序上使用 NLog 沒有任何問題,但這是我第一次在 MVC Web 應用程序上使用它。 當我嘗試登錄到文件時,什么也沒有發生。 沒有錯誤,也沒有創建任何日志文件。 當我在本地瀏覽應用程序時,我也沒有收到任何錯誤。

我做的第一件事是確認我的 NLog.config 文件的屬性在“Copy to Output”屬性中設置為“Copy always”。 我什至通過 NuGet 卸載了 NLog,然后再次安裝它以及關閉 VS 並再次打開項目。

我進行了一些搜索,發現的唯一真正建議是先創建文件夾位置,然后檢查應用程序池的權限。 我創建了文件夾位置,但這似乎也不起作用。 我正在通過 Visual Studio 2015 中的調試模式運行它,該模式會自動啟動本地 Web 服務器,因此我不知道如何找出它用於寫入文件位置的服務。

在下面的示例中,我可以在我的控制器內的 ActionResult 上放置一個斷點,並查看在“gate”參數中傳遞的值。 我對記錄器進行了測試,但沒有出現任何錯誤。 我查看了我的日志位置,但沒有創建日志文件。

有人對我可以嘗試的方法有什么建議嗎?

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" 
      throwExceptions="true">

  <variable name="LogDirBase" value="D:/logs/RampInfo"/>
  <variable name="LogYear" value="${date:format=yyy}"/>
  <variable name="LogMonth" value="${date:format=MM}"/>
  <variable name="LogDay" value="${date:format=dd}"/>
  <variable name="LogFileShortDate" value="${date:format=yyyy-MM-dd}"/>

  <targets>

    <target name="DefaultTarget"
      xsi:type="File"
      fileName="${LogDirBase}/${LogFileShortDate}.log"
      encoding="utf-8"
      layout="${longdate} | ${callsite} | ${message}"
      maxArchiveFiles="14"
    />

  </targets>

  <rules>
    <logger name="defaultLogger" minlevel="Debug" writeTo="DefaultTarget" />
  </rules>
</nlog>

我的控制器

public class RampController : Controller
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();


        // GET: GateInfo
        public ActionResult Gate(string gate)
        {

            logger.Debug("Start action result. Gate: " + gate);
    }

記錄器名稱通常使用這樣的東西

<logger name="Name.Space.RampController" minlevel="Debug" writeTo="DefaultTarget" /> 

或者,如果您只想為您的應用程序創建一個日志文件:

<logger name="*" minlevel="Debug" writeTo="DefaultTarget" /> 

在內部, LogManager.GetCurrentClassLogger查看當前 Stack 以確定調用類型:(移除了 Silverlight 條件):

public new T GetCurrentClassLogger()
{
    StackFrame frame = new StackFrame(1, false);
    return this.GetLogger(frame.GetMethod().DeclaringType.FullName);
}

我感謝大家的建議。 我花了幾個小時試圖找出 NLog 不工作的原因。 我放棄了這一天,今天早上帶着新的想法回來了。 我基本上是從一個全新的 NLog.config 開始的,而且效果很好。 我從不同的項目中復制了不同的 NLog 配置。 我真的沒有看到兩者之間的區別,但無論哪種方式,它現在都按預期工作。

這是我使用的新 NLog.config。

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      autoReload="true" 
      throwExceptions="true">

  <variable name="LogDirectory" value="D:\integration\logs\RampInfo"/>

  <targets>
    <target name="LogTarget" 
            xsi:type="File" 
            fileName="${LogDirectory}/${shortdate}.log" 
            encoding="utf-8"
            maxArchiveFiles="14" 
            layout="${longdate} ${callsite} ${message}" />
  </targets>

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM