Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Log4Net没有100%的时间记录日志_C#_.net_Wpf_Logging_Log4net - Fatal编程技术网

C# Log4Net没有100%的时间记录日志

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

我在让log4net记录我告诉它的所有内容时遇到了一些问题。这似乎真的取决于我把
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";