NLog正在跳过日志消息..NET问题?多线程问题?

Ed *_*dau 6 .net c# nlog

我有一个运行多线程C#.NET 4.5的应用程序.

在我的本地Windows 7笔记本电脑上运行,NLog会记录我的所有消息.我使用Visual Studio发布应用程序...将发布的应用程序复制到Windows Server 2008 ...并在服务器上运行应用程序:这会导致跳过日志消息.有人可以帮助我理解为什么以及如何解决这个问题或建议替代NLog?

我的配置文件如下:

我试过没有"async = true"

<targets async="true">


    <target  xsi:type="ColoredConsole"
            name="ColoredConsole"
            layout="${date} ${level} ${message} ${event-context:item=AlgID} " />

    <target name="xmlfile" xsi:type="File"
            fileName="C:\QRT\Logs\LogEmiter.Nlog.xlog" keepFileOpen="true"
            layout="${log4jxmlevent}" />

    <target xsi:type="File"
            name ="LogFile" fileName="C:\QRT\Logs\QRTLog-${shortdate}.log"
            layout ="${date:format=yyyy-MM-dd HH\:mm\:ss.fff}|${level}|${threadid}|${threadname}|${event-properties:item=FromID}|${message}${exception:format=tostring} "/>

    <target xsi:type="File"
            name ="TapeLogFile" fileName="C:\QRT\Logs\QRTMarketLog.txt"
            layout ="${date:format=yyyy-MM-dd HH\:mm\:ss.fff}|${level}|${message}"/>

  </targets>
     <rules>
        <!-- add your logging rules here -->

        <logger name ="TapeLogFile" minlevel="Trace" writeTo="TapeLogFile" />
        <logger name ="TapeLogFile" minlevel="Trace" writeTo="ColoredConsole" final="true"/>
        <logger name="*" minlevel="Trace" writeTo="ColoredConsole" />
        <logger name="*" minlevel="Trace" writeTo="xmlfile" />
        <logger name="*" minlevel="Trace" writeTo="LogFile" />


        <!--
        Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
        <logger name="*" minlevel="Debug" writeTo="f" />
        -->
      </rules>
    </nlog>
Run Code Online (Sandbox Code Playgroud)

我以这种方式记录消息:

在我的典型课程中,我会初始化我的NLog助手类:

    private void InitliazlieLogger()
    {
        LogManager.ThrowExceptions = true;
        m_logger = new NLogHelper(LogManager.GetCurrentClassLogger());
        m_logger.Set("FromID", "Email"); // Class setting.
    }

private void DoSomething(int _x) 
{
    m_logger.Debug ("Print this statement: {0}", _x);
}
Run Code Online (Sandbox Code Playgroud)

我有一个NLog助手类......

public NLogHelper(Logger Logger)
{
    m_logger = Logger;
    m_properties = new Dictionary<string, object>();
}

public void Debug(string Message, params object[] Args)
        {
            m_logger.Debug()
                .Message(Message, Args)
                .Properties(m_properties)
                .Write();
            notify(Severity.Debug, Message);
        }
Run Code Online (Sandbox Code Playgroud)

问题是只是跳过了一些日志消息.我添加了自己的日志类,它手动写入文件,并在NLogHelper.Debug中插入一个调用,我发现我手动编写的文件有一套完整的日志消息,但NLog输出丢失了一些.

同样,这适用于我的笔记本电脑,但在Windows Server 2008上失败.我的服务器安装了.NET 4.6.1.我的Windows 7机器上似乎只有4.5.2.可能是吗?

作为旁注:如果我上传所有源文件服务器并使用服务器上的Visual Studio编译完全相同的代码,NLog似乎有用吗?!?

-困惑.

谢谢-Ed

小智 0

我正在使用以下代码并且工作正常。

 public class ServerDataSource : IDataSource
    {
        private Logger _log;
        public ServerDataSource()
        {
            _log = LogManager.GetLogger("ServerDataSource");
        }
      public bool DoSomething()
        {
            try
            {
                  _log.Info("Doing something");

            }
            catch (Exception ex)
            {
                _log.Error("Error occurred" + ex.Message);
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

配置如下

  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>
Run Code Online (Sandbox Code Playgroud)