我有一个运行多线程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)