Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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# 登录承载NancyFx web服务的控制台应用程序_C#_Logging_Log4net_Nancy - Fatal编程技术网

C# 登录承载NancyFx web服务的控制台应用程序

C# 登录承载NancyFx web服务的控制台应用程序,c#,logging,log4net,nancy,C#,Logging,Log4net,Nancy,我在做什么 我正在编写一个Nancy自托管应用程序(在控制台窗口中运行) 我的问题 我无法让log4net将任何内容记录到我的控制台窗口。(具体地说,我在托管NancyFx服务时无法实现这一点,我在其他控制台应用程序中使用Log4Net没有问题。) 我所研究的 除了搜索StackOverflow外,我还查看了以下页面: 我的log4net配置 <?xml version="1.0" encoding="utf-8"?> <configuration>

我在做什么
我正在编写一个Nancy自托管应用程序(在控制台窗口中运行)

我的问题
我无法让log4net将任何内容记录到我的控制台窗口。(具体地说,我在托管NancyFx服务时无法实现这一点,我在其他控制台应用程序中使用Log4Net没有问题。)

我所研究的
除了搜索StackOverflow外,我还查看了以下页面:

我的log4net配置

<?xml version="1.0" encoding="utf-8"?>
   <configuration>
      <configSections>
         <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>

      <log4net>
         <appender name="Console" type="log4net.Appender.ConsoleAppender">
             <layout type="log4net.Layout.PatternLayout">
               <conversionPattern value="%date %-5level: %message%newline" />
            </layout>
         </appender>

         <root>
            <level value="DEBUG"/>
            <appender-ref ref="Console"/>
         </root>
      </log4net>
    <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
    </startup>
 </configuration>
 public class MyNancyModule : NancyModule
 {
    private static ILog Logger = LogManager.LogFactory.GetLogger(typeof(MyNancyModule));

    public MyNancyModule()
    {
       Logger.Debug("This is a test");
    }
 }
我的问题(再次)
使用上述配置,我无法让log4net将任何内容记录到我的控制台窗口。我从上面的博客文章中了解到,Nancy做了一些配置错误处理管道的工作,这些管道会干扰log4Net,但我不太明白它在做什么或如何做

如何让log4Net在自托管服务中工作,以便登录到控制台窗口(我对登录到内置诊断页面并不特别感兴趣)

我没有像在所有其他应用程序中那样尝试将日志管理器添加到IOC容器中,我通常每个类都有一个静态日志管理器,它为我提供特定于类的日志记录—博客文章中的示例将记录所有源于bootstrapper类的内容

编辑 我忘了提到我正在为logManager使用ServiceStack.Logging.Log4Net。在我的示例中,如果我:

private static ILog Logger = LogManager.GetLogger(typeof(ApiReverseProxyModule));
我使用log4net,比如:

首先,必须定义一次XmlConfigurator:

XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
并且您可以在类中使用它:

var log = LogManager.GetLogger("ClassName");

log.Debug("What you want...");

感谢斯图尔特为我指明了正确的方向。我提到的博客有点误导人——结果我失踪了

LogManager.LogFactory = new Log4NetFactory(configureLog4Net: true);
从我的主方法-所以我总是使用空日志工厂

这似乎与NancyFX无关


希望这对别人有帮助

你真的试过用NancyFx做这件事吗?我刚刚尝试将您建议的代码添加到我的主文件中,但没有任何区别。它适用于标准控制台应用程序(如上所述的配置),但在自托管NancyFx服务时则不行。好的,对于ASP.NET应用程序,它的工作方式不同,您必须使用不同的Appender。TraceAppender是您的选择:您在哪里/何时加载log4net配置?@stuartd您的问题是相关的-我忘记添加行
LogManager.LogFactory=new Log4NetFactory(configureLog4Net:true)到我的主方法。如果你想要这个代表,把这个作为答案,我会这样标记。谢谢答案似乎有点单薄,但谢谢:)