C# Log4Net没有100%的时间记录日志
我在让log4net记录我告诉它的所有内容时遇到了一些问题。这似乎真的取决于我把C# Log4Net没有100%的时间记录日志,c#,.net,wpf,logging,log4net,C#,.net,Wpf,Logging,Log4net,我在让log4net记录我告诉它的所有内容时遇到了一些问题。这似乎真的取决于我把log.Info()调用放在哪里;如果我把它放在正确的地方,它会工作,其他时候不会 这是我的配置文件: 下面是调用log.Info()方法的客户端类: 在使用方面: using System.Reflection; using log4net; 在我的现场声明中: private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurr
log.Info()调用放在哪里;如果我把它放在正确的地方,它会工作,其他时候不会
这是我的配置文件:
下面是调用log.Info()方法的客户端类:
在使用方面:
using System.Reflection;
using log4net;
在我的现场声明中:
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
调用方法(这非常有效):
我以前的方式(这不起作用):
在第二个示例中,没有抛出任何异常,但是log.Info()调用不起作用。我甚至在log.Info()行上放置了一个断点;在那次调用中它就中断了,一切都正常执行,但是我检查了我的日志文件,那一行从未被写入
在这个特定的例子中,我很幸运,因为我可以灵活地调用log.Info();在同一个项目的其他类中,我没有这种灵活性,调用只能在一个特定的位置
这是怎么回事?还有什么我可以解决的吗?每次写入后是否需要刷新文件?任何帮助都将不胜感激
问候,
Kyle我认为发生的是MessageBox.Show()阻塞了您的线程。如果您确实需要弹出窗口,您应该尝试创建一个非模式对话框来替换MessageBox.Show()
在我个人看来,我不喜欢点击任何东西来继续使用程序,所以我会用NotifyIcon或类似的东西来替换它,并在上面显示消息。我唯一能想到的是,因为显示MessageBox是一种模式操作,您可能在尝试登录时发生了一些尚未完成的事情。因此,在您的示例中,可能是日志未准备就绪,或者CurrentUserData为null,因为它是异步的?“在第二个示例中,根本不会引发异常”。这是意料之中的,因为Log4net永远不会抛出任何异常,即使它失败了。您需要启用log4net的内部日志记录,以查看失败的原因。您在哪里配置log4net?
MessageBox.Show(
"Hello " + LoginManager.CurrentUserData[1].ToString() + "!\n\n" +
"Welcome to the BinOptics Visual Inspection Console.",
"Login Successful!", MessageBoxButton.OK, MessageBoxImage.Exclamation);
WaferTrackerWindow wtw = new WaferTrackerWindow();
wtw.Show();
log.Info(
LoginManager.CurrentUserData[1].ToString() +
" has successfully logged in. ");
return "Exit";
log.Info(
LoginManager.CurrentUserData[1].ToString() +
" has successfully logged in. ");
MessageBox.Show(
"Hello " + LoginManager.CurrentUserData[1].ToString() + "!\n\n" +
"Welcome to the BinOptics Visual Inspection Console.",
"Login Successful!", MessageBoxButton.OK, MessageBoxImage.Exclamation);
WaferTrackerWindow wtw = new WaferTrackerWindow();
wtw.Show();
return "Exit";