2016-10-07 1 views
1

Ce que je fais
Je suis en train d'écrire une application d'hébergement auto Nancy (fonctionne dans une fenêtre de la console)Connexion à une application console qui héberge un service Web NancyFx

Mon problème
Je ne peux pas log4net pour enregistrer n'importe quoi dans ma fenêtre de console. (Plus précisément - Je ne peux pas obtenir ce travail lors de l'hébergement d'un service de NancyFx, je n'ai aucun problème à l'aide Log4Net dans d'autres applications de la console.)

Ce que j'ai fait des recherches
J'ai regardé les pages suivantes (en plus StackOverflow recherche):
http://www.philhack.com/wire-up-log4net-to-nancy/ https://lookonmyworks.co.uk/2012/03/14/logging-unhandled-exceptions-with-nancy/

Mon log4net Configuration

<?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> 

Exemple de mon utilisation de Log4Net

public class MyNancyModule : NancyModule 
{ 
    private static ILog Logger = LogManager.LogFactory.GetLogger(typeof(MyNancyModule)); 

    public MyNancyModule() 
    { 
     Logger.Debug("This is a test"); 
    } 
} 

Mon problème (encore une fois)
Je ne peux pas log4net de se connecter quoi que ce soit à la fenêtre de ma console en utilisant la configuration ci-dessus. Je comprends à partir des articles de blog ci-dessus que Nancy fait quelque chose pour configurer les pipelines de gestion des erreurs qui interfèrent avec log4Net, mais je ne comprends pas très bien ce qu'il fait ou comment. Comment puis-je faire fonctionner log4Net dans un service Nancy auto-hébergé afin de me connecter à la fenêtre de la console (je ne suis pas particulièrement intéressé par la connexion à la page de diagnostic intégré)?

Je n'ai pas essayé d'ajouter le gestionnaire de journal au conteneur IOC comme dans toutes mes autres applications, j'ai généralement un gestionnaire de journaux statique par classe qui me donne une journalisation spécifique à la classe ayant pour origine la classe bootstrapper.

Modifier j'oublié de mentionner que j'utilise ServiceStack.Logging.Log4Net pour le logmanager. Il a également ne semble pas travailler dans mon exemple, si je fais:

private static ILog Logger = LogManager.GetLogger(typeof(ApiReverseProxyModule)); 
+0

Où/quand chargez-vous la configuration de log4net? – stuartd

+0

@stuartd Votre question était pertinente - J'ai oublié d'ajouter la ligne 'LogManager.LogFactory = new Log4NetFactory (configureLog4Net: true);' à ma méthode principale. Si vous voulez le représentant, ajoutez ceci comme réponse et je le marquerai comme tel. Merci! – Jay

+0

Semble un peu mince pour une réponse mais merci :) – stuartd

Répondre

0

Merci à Stuartd de m'avoir indiqué la bonne direction. Les blogs dont j'ai parlé étaient un peu trompeur - se révèle que je manquais

LogManager.LogFactory = new Log4NetFactory(configureLog4Net: true); 

de ma méthode principale - donc j'utilisait toujours une usine d'exploitation forestière nulle.

Cela ne semble être rien à voir avec NancyFX!

Espérons que cela aide quelqu'un!

1

i utiliser log4net comme:

D'abord, vous devez définir une fois que le XmlConfigurator:

XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile)); 

et vous le pouvez Utilisez-le dans les classes:

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

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

Avez-vous réellement essayé de le faire en utilisant NancyFx? J'ai juste essayé d'ajouter le code que vous avez suggéré dans mon fichier principal, et cela n'a fait aucune différence. Cela fonctionne bien pour une application de console standard (comme le fait la configuration que j'ai posté ci-dessus), mais pas lors de l'auto-hébergement d'un service NancyFx. – Jay

+0

OK, pour l'application ASP.NET cela fonctionne différemment, vous devez utiliser un Appender différent. Le TraceAppender est votre choix: http://interactivelogic.net/wp/2010/02/aspnet-logging-to-output-window-with-log4net/ –