Je suis en train de mettre à niveau une application existante de 5 à 6. Mon application est une application Web .NET. Je compte sur la bibliothèque Enterprise pour enregistrer les erreurs dans la base de données (serveur SQL).Mise à niveau de l'application de Enterprise Library 5 vers 6
Mon application utilise également un écouteur de base de données personnalisé et un gestionnaire d'exception de journalisation personnalisé (tous deux sous la forme de projets .net distincts dans ma solution).
Donc, j'ai 6 installé, et ont ajouté le code suivant à Application_Start-
IConfigurationSource config = ConfigurationSourceFactory.Create();
ExceptionPolicyFactory factory = new ExceptionPolicyFactory(config);
Logger.SetLogWriter(new LogWriterFactory().Create());
ExceptionManager exceptionManager = factory.CreateManager();
je reçois un System.NotImplementedException quand il frappe le Logger.SetLogWriter (nouveau LogWriterFactory(). Créer()) ; ligne de code.
EDIT: détails d'erreur plus spécifiques
System.NotImplementedException was unhandled by user code
HResult=-2147467263
Message=Must be implemented by subclasses.
Source=Microsoft.Practices.EnterpriseLibrary.Logging
Qu'est-ce que je fais mal?
Voici mon web.config-
<configSections>
<section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling" requirePermission="true" />
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
</configSections>
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
<listeners>
<add name="Database Trace Listener" type="ExtendedPropertyDatabaseListener.ExtendedFormattedDatabaseTraceListener, ExtendedPropertyDatabaseListener" listenerDataType="ExtendedPropertyDatabaseListener.ExtendedFormattedDatabaseTraceListenerData, ExtendedPropertyDatabaseListener" databaseInstanceName="ablmprod" writeLogStoredProcName="Logging.WriteLog" addCategoryStoredProcName="Logging.AddCategory" formatter="Text Formatter" />
<add name="Event Log Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" source="Enterprise Library Logging" formatter="Text Formatter" />
</listeners>
<formatters>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" template="Timestamp: {timestamp}{newline}
Message: {message}{newline}
Category: {category}{newline}
Priority: {priority}{newline}
EventId: {eventid}{newline}
Severity: {severity}{newline}
Title:{title}{newline}
Machine: {localMachine}{newline}
App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
Win32 ThreadId:{win32ThreadId}{newline}
Extended Properties: {dictionary({key} - {value}{newline})}" name="Text Formatter" />
</formatters>
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Database Trace Listener" />
</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="Event Log Trace Listener" />
</listeners>
</errors>
</specialSources>
</loggingConfiguration>
<exceptionHandling>
<exceptionPolicies>
<add name="Policy">
<exceptionTypes>
<add name="All Exceptions" type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" postHandlingAction="NotifyRethrow">
<exceptionHandlers>
<add name="Logging Exception Handler" type="CustomExceptionLoggingHandler.CustomExceptionLoggingHandler, CustomExceptionLoggingHandler" logCategory="General" eventId="100" severity="Error" title="Enterprise Library Exception Handling" formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling" priority="0" />
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
</exceptionPolicies>
</exceptionHandling>
EDIT: Merci à @lrb pour moi d'obtenir sur la bonne voie. Voici le code qui a fonctionné -
protected void Application_Start()
{
LoggingConfiguration loggingConfiguration = BuildLoggingConfig();
LogWriter logWriter = new LogWriter(loggingConfiguration);
Logger.SetLogWriter(logWriter, false);
ExceptionPolicy.SetExceptionManager(exManager);
// Create the default ExceptionManager object programatically
exManager = BuildExceptionManagerConfig(logWriter);
// Create an ExceptionPolicy to illustrate the static HandleException method
ExceptionPolicy.SetExceptionManager(exManager);
...
}
private static LoggingConfiguration BuildLoggingConfig()
{
// Formatters
var config = new LoggingConfiguration();
return config;
}
private static ExceptionManager BuildExceptionManagerConfig(LogWriter logWriter)
{
var policies = new List<ExceptionPolicyDefinition>();
var logAndWrap = new List<ExceptionPolicyEntry>
{
new ExceptionPolicyEntry(typeof (Exception),
PostHandlingAction.ThrowNewException,
new IExceptionHandler[]
{
new WrapHandler("An application error has occurred.",
typeof(APIAvailabilityException))
})
};
policies.Add(new ExceptionPolicyDefinition("Policy", logAndWrap));
return new ExceptionManager(policies);
}
je reçois toujours la même erreur. – Chris