J'ai une bibliothèque de frameworks qui ferait beaucoup de choses y compris la journalisation. Nous utilisons log4net pour la journalisation. Ce cadre a la classe d'enregistrement statique LogManager, une instance statique de ILog (enregistreur) et des méthodes statiques pour la connexion INFO, AVERTISSEMENT, DEBUG etc.Connexion log4net à partir de l'application Web
L'enregistreur d'instance statique est s'initialisé comme ceci:
public static class LogManager
{
private static ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
static ActivityLogManager()
{
}
public static void LogDebugy(string message, params object[] messageParameters)
{
// Log the message here
}
}
J'ai mes propres doutes si c'est la bonne façon de le faire. Je vois de here que chaque classe qui doit se connecter, doit déclarer une instance statique de ILog
.
Aussi, je vois que je devrais spécifier le fichier de configuration Log4net dans mon projet de cadre pour se connecter. Je pensais lire here que la config serait récupérée à partir de l'assemblage en cours d'exécution, mais je ne le vois pas arriver.
Est-il possible de faire ma journalisation à partir de ma classe de structure avec la configuration récupérée depuis mon application Web (pour mon application Web) ou un autre projet de bibliothèque d'entreprise (pour mes bibliothèques de classe affaires)? Je voudrais également ajouter quelques informations personnalisées dans mon journal (comme l'ID d'objet métier personnalisé, le pool d'applications, ServerName, ClientHostName, ClientBrowser, ClientOS, Client User, etc.). C'est possible?
J'utilise AdoNetAppender.
Édition1: J'utilise log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = true)
dans mon assembly.cs pour pointer vers le fichier de configuration log4net.
Édition2: Mon ILog Logger
est dans ma classe LogManager, donc une seule instance est générée pour mon application.
Habituellement, chaque classe qui doit enregistrer quelque chose a ses propres instances ILog, de préférence avec un nom qui indique une sorte de hiearchy (Namespace + Type est commun.) Cela permet de filtrer les messages. NHibernate fait cela, ce qui vous permet, par exemple, de filtrer les messages de certaines sous-bibliothèques et de vider toutes les requêtes SQL (qui sont généralement enregistrées dans DEBUG). – Skurmedel