我正在使用NLog登录网络。根据我的理解,无论项目的其他部分如何,下面列出的代码和配置都应该始终有效。它确实适用于我的项目的某些配置,但对于其他配置它失败了,我无法弄清楚确切的原因。
我注意到(在非工作配置中)NLog在登录到127.0.0.2时抛出但是在127.0.0.1中无声地失败(在日志中没有错误,但显然没有发送消息)。由于两个地址都应该表现得相同,所以我很难过。我正在使用Sentinel作为日志查看器。
尽管拥有完全相同的代码和配置,NLog怎么可能失败?对于127.0.0.1和.2来说,它的表现如何?
代码:
internal class Program
{
protected static Logger logger = LogManager.GetLogger ("Console.Main");
private static void Main (string[] args)
{
logger.Trace ("Initializing platform");
NLog.config:
<targets>
<target name="viewer"
xsi:type="NLogViewer"
address="udp://127.0.0.2:9999"/>
<target name="file"
xsi:type="File"
layout="${longdate} ${logger} ${message} ${exception}"
fileName="${basedir}/logs/logfile.txt"
keepFileOpen="false"
encoding="iso-8859-2" />
<target xsi:type="ColoredConsole"
layout="${logger} ${message} ${exception}"
name="console"/>
</targets>
<rules>
<logger name="*"
minlevel="Trace"
writeTo="viewer" />
<logger name="*"
minlevel="Trace"
writeTo="file" />
<logger name="*"
minlevel="Info"
writeTo="console" />
</rules>
127.0.0.2
的内部日志文件:
2011-10-11 12:05:08.4364 Error Target exception: System.Net.Sockets.SocketException (0x80004005): No such host is known
at System.Net.Dns.InternalGetHostByAddress(IPAddress address, Boolean includeIPv6)
at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
at NLog.Internal.NetworkSenders.UdpNetworkSender..ctor(String url)
at NLog.Internal.NetworkSenders.NetworkSender.Create(String url)
at NLog.Targets.NetworkTarget.NetworkSend(String address, Byte[] bytes)
at NLog.Targets.NetworkTarget.Write(LogEventInfo logEvent)
at NLog.LoggerImpl.Write(Type loggerType, TargetWithFilterChain targets, LogEventInfo logEvent, LogFactory factory)
答案 0 :(得分:1)
找到它。所有配置都引用了相同的DLL,但其中一些使用了GAC中的一个,而不是一个暗示的。手动复制DLL并重写项目引用可以解决问题。
为什么VS没有给丢失的DLL提供最高级别的警告...