2010-09-10 4 views
0

Je travaille sur un projet avec des composants de Sharepoint Workflow personnalisés auxquels j'aimerais ajouter log4net.log4net et Sharepoint 2007 Workflow

Je me bats vraiment pour que log4net sorte quoi que ce soit!

Voici ma configuration actuelle:

Dans le codebehind pour mon flux de travail:

private ILog log; 

public MessageQueueWorkflow() 
{ 
    InitializeComponent(); 

    string filepath = ConfigurationManager.AppSettings["log4netConfigPath"]; 
    if (!string.IsNullOrEmpty(filepath)) 
    { 
     log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(filepath)); 
     log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
    } 

} 

public Guid workflowId = default(System.Guid); 
public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties(); 

private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e) 
{ 
    try 
    { 
     #region Logging 
     if (log.IsDebugEnabled) 
     { 
      log.Debug(System.Reflection.MethodInfo.GetCurrentMethod().Name); 
     } 
     #endregion Logging 

     // do some stuff 
    } 
    catch (Exception ex) 
    { 
     if (log.IsErrorEnabled) 
     { 
      log.Error("An error has occurred.", ex); 
     } 

     throw ex; 
    } 
} 

Dans mon web.config pour le site Sharepoint:

<appSettings> 
    <add key="log4netConfigPath" value="C:\Inetpub\wwwroot\wss\VirtualDirectories\80\log4net.config"/> 
</appSettings> 

Dans mon fichier log4net.config :

<log4net debug="true"> 
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > 
    <applicationName value="MyApp" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d %-5p %c - %m%n" /> 
    </layout> 
    </appender> 
</log4net> 

Maintenant, lorsque je lance ce workflow, je m'attends à voir apparaître des entrées de débogage dans l'EventViewer, mais je ne reçois rien.

Des idées que je fais mal?

Merci!

Répondre

1

Vous devez configurer au moins un enregistreur. Habituellement, vous devez configurer l'enregistreur racine. .: par exemple

<log4net> 
    ... 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="EventLogAppender" />  
    </root> 
</log4net> 

Si cela ne fait-il fonctionner encore, le je vous recommande de configurer un écouteur de la trace qui sortie les messages de débogage internes log4net. (Vous avez déjà le débogage interne est activée.)

+0

Génial ... Merci Stefan. Je me suis beaucoup amusé avec le fichier de configuration, et je n'avais pas remarqué que j'avais écroulé le nœud ! Le traçage était également une bonne suggestion, et m'a montré que quel que soit l'ID de service sous lequel Sharepoint fonctionne, il n'a pas accès à l'EventLog. Je l'ai changé pour enregistrer dans un fichier, et cela fonctionne correctement maintenant. – NeilD

0

Gardez à l'esprit que whenver flux de travail va dormir (sérialisé à la base de données) et se réveille, il continue de fonctionner dans les processus Owstimer.exe et vous PLUS voir toutes les entrées de journal. Cela s'applique également aux entrées de journal écrites dans le récepteur d'événements ou aux méthodes exécutées par stsadm ou à tout autre processus que le processus de travail IIS.

Donc, je vous recommande de:

  • log4net.config Put dans le répertoire 12Hive/
  • CONFIG de log4net.dll Put dans GAC

Alors je préfère mettre dans mon AssemblyInfo. cs:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = 
    @"C:\Program Files\Common Files\Microsoft Shared\" + 
    @"Web Server Extensions\12\CONFIG\log4net.config", Watch = true)] 

Donc quel que soit le processus utilisera mon assembly, il sera enregistré (devrais-je t être récepteur d'événement, console stsadm ou gestionnaire SharePoint - tout est enregistré).

Voir SharePoint and Log4Net question.