2009-10-27 3 views
1

J'utilise Database TraceListener pour la journalisation. J'ai exécuté le CreateLoggingDb.cmd et la base de données de journalisation est en place. Mon web.config ressemble à ci-dessous.Base de données Trace Listener avec la bibliothèque Enterprise 2.0 ne pas se connecter à la base de données

Lorsqu'une exception se produit, j'essaie de l'enregistrer comme ci-dessous.

ExceptionPolicy.HandleException(ex, "PayrollException"); 

Le code s'exécute mais il ne se connecte pas dans la table de base de données. S'il vous plaît laissez-moi savoir si les paramètres dans web.config ne sont pas corrects ou la procédure de journalisation doit être différente.

<configuration> 
<configSections> 
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
    <section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
</configSections> 
<loggingConfiguration name="Logging Application Block" tracingEnabled="true" defaultCategory="General" logWarningsWhenNoCategoriesMatch="true"> 
    <listeners> 
    <add databaseInstanceName="LoggingConn" writeLogStoredProcName="WriteLog" 
     addCategoryStoredProcName="AddCategory" formatter="Text Formatter" 
     listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" 
     traceOutputOptions="None" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" 
     name="Database Trace Listener" /> 

    </listeners> 
    <formatters> 
    <add template="Timestamp: {timestamp} 
     Message: {message} 
     Category: {category} 
     Priority: {priority} 
     EventId: {eventid} 
     Severity: {severity} 
     Title:{title} 
     Machine: {machine} 
     Application Domain: {appDomain} 
     Process Id: {processId} 
     Process Name: {processName} 
     Win32 Thread Id: {win32ThreadId} 
     Thread Name: {threadName} 
     Extended Properties: {dictionary({key} - {value} 
     )}" type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" name="Text Formatter"/> 
    </formatters> 
    <categorySources> 
    <add switchValue="All" name="General"> 
    <listeners> 
    <add name="Database TraceListener"/> 
    </listeners> 
    </add> 
    </categorySources> 
    <specialSources> 
    <allEvents switchValue="All" name="All Events"/> 
    <notProcessed switchValue="All" name="Unprocessed Category"/> 
    <errors switchValue="All" name="Logging Errors & Warnings"> 
    <listeners> 
    <add name="Database TraceListener"/> 
    </listeners> 
    </errors> 
    </specialSources> 
</loggingConfiguration> 
<exceptionHandling> 
    <exceptionPolicies> 
    <add name="PayrollException"> 
    <exceptionTypes> 
    <add type="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" postHandlingAction="NotifyRethrow" name="Exception"> 
     <exceptionHandlers> 
     <add exceptionMessage="Payroll Application Exception" wrapExceptionType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionHandlingException, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WrapHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" name="Wrap Handler"/> 
     </exceptionHandlers> 
    </add> 
    </exceptionTypes> 
    </add> 
    </exceptionPolicies> 
</exceptionHandling> 
<connectionStrings> 
    <add name="Conn" connectionString="Database=Payroll;Server=10.135.158.211;User Id=xanoneappusr;Password=vivekm123;" providerName="System.Data.SqlClient"/> 
    <add name="LoggingConn" connectionString="Database=Logging;Server=10.135.158.211;User Id=xanoneappusr;Password=vivekm123;" providerName="System.Data.SqlClient"/> 
</connectionStrings> 
<appSettings> 
    <add key="PayrollApplication" value="Payroll"/> 
</appSettings> 
<system.web> 
    <compilation debug="true" batch="false"> 
    <assemblies> 
    <add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> 
    <add assembly="System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation> 
    <roleManager enabled="true"/> 
    <authentication mode="Forms"/> 
    <membership> 
    <providers> 
    <clear/> 
    <add connectionStringName="Conn" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" applicationName="PayrollApplication" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider"/> 
    </providers> 
    </membership> 
</system.web> 
</configuration>#x# 

Répondre

2

Quelques endroits pour commencer la recherche sont les suivants:

  1. Avez-vous utilisé EntLibConfig.exe pour construire le web.config? C'est un exe qui vient avec Enterprise Library, vous devriez le trouver dans le répertoire Bin de l'installation de la bibliothèque d'entreprise dans Program Files - il vous donne une interface graphique raisonnablement intuitive pour configurer la bibliothèque d'entreprise pour une application: pointez simplement sur la config. fichier pour votre application et configurer les choses que vous voulez. Pour la journalisation de la base de données, vous devez configurer vos chaînes de connexion à l'aide du Bloc d'accès aux données - vous aurez besoin d'une autre section dans votre fichier de configuration pour cela. Pour votre chaîne de connexion à la base de données, quel mode d'authentification utilisez-vous? L'identité de l'utilisateur qui exécute l'application a-t-elle un accès en écriture à la base de données de journalisation?

  2. Avez-vous une autre connectivité de base de données?

De même, si vous utilisez .Net framework 3.5, vous devriez envisager d'utiliser la version 4.1 de la bibliothèque d'entreprise.

EDIT après le fichier de configuration fourni

En regardant le fichier de configuration que vous avez attaché (vous pouvez supprimer les mots de passe par le chemin) Je pense que vous manquez un gestionnaire d'exception de l'exploitation forestière - la seule exception gestionnaire que vous semblez avoir est un gestionnaire d'exceptions d'habillage. Vous trouverez ci-dessous un exemple d'une de mes stratégies de gestion des exceptions (à partir de la version 4.1 de la bibliothèque d'entreprise, mais la vôtre doit être similaire).

<exceptionPolicies> 
    <add name="Data Layer Policy"> 
    <exceptionTypes> 
     <add type="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     postHandlingAction="NotifyRethrow" name="Exception"> 
     <exceptionHandlers> 
      <add logCategory="DataLayer" eventId="100" severity="Error" title="Data Layer Exception" 
      formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      priority="0" useDefaultLogger="false" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      name="Logging Handler" /> 
     </exceptionHandlers> 
     </add> 
    </exceptionTypes> 
    </add> 
</exceptionPolicies> 

Le gestionnaire de retour à la ligne est utilisé lorsque vous voulez envelopper une exception autour d'une autre. Vous pouvez avoir à la fois un gestionnaire de journalisation et un gestionnaire de bouclage si cela est nécessaire - les gestionnaires de journalisation tirent avant les wrapping.

Questions connexes