Sto convertendo da Prism 2.1 a Prism 4 e ho bisogno di scrivere una classe ILoggerFacade per Log4Net. Il mio vecchio codice da Prism 2.1 non funziona più. Qualcuno ha codice di esempio per una lezione di ILoggerFacade che sarebbe disposto a condividere? Grazie per l'aiuto.Prism 4 ILoggerFacade per Log4Net?
risposta
L'ho capito. Molto simile a Prism 2. In primo luogo, creare una classe di logger personalizzata che implementa ILoggerFacade. Ecco la mia classe:
using log4net;
using Microsoft.Practices.Prism.Logging;
namespace FsNoteMaster3
{
class Log4NetLogger : ILoggerFacade
{
#region Fields
// Member variables
private readonly ILog m_Logger = LogManager.GetLogger(typeof(Log4NetLogger));
#endregion
#region ILoggerFacade Members
/// <summary>
/// Writes a log message.
/// </summary>
/// <param name="message">The message to write.</param>
/// <param name="category">The message category.</param>
/// <param name="priority">Not used by Log4Net; pass Priority.None.</param>
public void Log(string message, Category category, Priority priority)
{
switch (category)
{
case Category.Debug:
m_Logger.Debug(message);
break;
case Category.Warn:
m_Logger.Warn(message);
break;
case Category.Exception:
m_Logger.Error(message);
break;
case Category.Info:
m_Logger.Info(message);
break;
}
}
#endregion
}
}
Poi, nella classe prisma 4 di avvio automatico, aggiungere un override del metodo CreateLogger()
che restituisce una nuova istanza della classe logger personalizzato:
protected override Microsoft.Practices.Prism.Logging.ILoggerFacade CreateLogger()
{
return new Log4NetLogger();
}
Si noti che nel costume classe logger, ILog
è un'interfaccia Log4Net e LogManager
è un oggetto Log4Net.
Scrivere sul registratore personalizzato dal proprio codice (Prism si prende cura delle proprie voci di registro) è leggermente diverso rispetto a Prism 2.1. È possibile risolvere il logger direttamente dal contenitore IoC oppure utilizzare ServiceLocator. Lo ServiceLocator
ha il vantaggio di essere indipendente dal contenitore, il che significa che il contenitore sottostante non ha molta importanza. Ecco un esempio di risolvere un registratore utilizzando il ServiceLocator:
var logger = (Log4NetLogger)ServiceLocator.Current.GetInstance(typeof(ILoggerFacade));
logger.Log("App.OnStartup() completed", Category.Info ,Priority.None);
Il ServiceLocator
richiede che il progetto di accoglienza hanno un riferimento a Microsoft.Practices.ServiceLocation.dll e un corrispondente using
dichiarazione.
- 1. Migrate Prism da 4 a 6 Prism - CompositePresentationEvent
- 2. Arresto anomalo dell'applicazione tramite WPF PRISM 4
- 3. WPF/Silverlight - Prism - Risorse per i principianti
- 4. AvalonDock con adattatore Prism Region
- 5. Come estendere Prism per MVVM codice boiler
- 6. Perché usare Prism?
- 7. log4net Configurazione per app console
- 8. Log4Net e .NET 4.0
- 9. Comunicazione tra moduli con Prism?
- 10. Utilizzo di Prism con Ninject
- 11. Condivisione di stili tra moduli in applicazioni Silverlight basate su Prism 4
- 12. Buone Delphi Prism risorse online
- 13. log4Net XmlHierarchyConfigurator
- 14. Esiste una versione di log4net per Silverlight?
- 15. Configurare log4net per il progetto asp.net MVC3
- 16. C'è un modello log4net per machineName
- 17. Aggregazione evento Prism - sottoscrittore non attivato
- 18. Riferimento il corretto dll System.Windows.Interactivity dall'applicazione Prism
- 19. Prism 2.1 Moduli iniettando nel ViewModel
- 20. Come si paragona Prism con Caliburn?
- 21. log4net con .NET 4.0
- 22. log4net argomento LogManager.GetLogger
- 23. È log4net morto?
- 24. Sicurezza thread di log4net
- 25. configurazione log4net con [assembly:]
- 26. Log4Net e campi aggiuntivi
- 27. log4net e system.data.sqlite
- 28. Configurazione log4net fluente
- 29. Unit Test & Log4net
- 30. Log4Net con Application Insights
Grazie per questo David. – JohnC
Grazie, ma perché lo hai lanciato su 'Log4NetLogger'? se la soluzione di registrazione viene modificata, tutte le istanze del logger devono essere nuovamente convertite in un altro tipo o rimuovere il codice di cast! – Jalal
Infatti, perché dovresti lanciare? Ciò implicherebbe che sarebbe necessario un riferimento all'assembly che definisce Log4NetLogger, che sconfigge l'intero scopo ... – Kris