J'utilise log4Net pour le journal de mon système. Le nœud connectionString est obligatoire si le type appender est AdoNetAppender dans Log4Net. Cependant, j'ai déjà une chaîne connectionString sur mon site Web où j'utilise Log4Net.
Comment puis-je utiliser le connecteur du site Web pour log4Net au lieu de configurer à nouveau le même connecteur dans le fichier de configuration log4net?
C'est assez simple, il vous suffit de remplacer la configuration appender connectionString
.
Au lieu de la chaîne de connexion:
<connectionString value="[Complete Connection]" />
Vous utilisez simplement la configuration connectionStringName
:
<connectionStringName value="ApplicationConnection" />
Et puis vous avez votre chaîne de connexion d'application:
<connectionStrings>
<add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
</connectionStrings>
Malheureusement, vous devez avoir la connectionType
avec le connectionStringName, exemple:
<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
<connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="ApplicationConnection" />
...
Vous pouvez mettre à jour ConnectionString de AdoNetAppender de manière dynamique, après avoir configuré log4net pour votre site Web, généralement dans le fichier Global.asax. Après votre appel à configurer le log4net en utilisant XmlConfigutor()
ou quelque chose .. vous pouvez appeler la méthode ci-dessous qui vérifie tous les AdoNetAppenders et met à jour le connectionString requis.
private static void ConfigureLog4Net()
{
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null && hierarchy.Configured)
{
foreach(IAppender appender in hierarchy.GetAppenders())
{
if(appender is AdoNetAppender)
{
var adoNetAppender = (AdoNetAppender)appender;
adoNetAppender.ConnectionString = ConfigurationManager.AppSettings["YOURCONNECTIONSTRINGKEY"].ToString();
adoNetAppender.ActivateOptions(); //Refresh AdoNetAppenders Settings
}
}
}
}
Vous pouvez maintenant utiliser la propriété ConnectionStringName de AdoNetAppender pour qu'elle pointe vers une chaîne nommée connectionString dans votre application ou dans le fichier web.config:
Pour ce faire, vous pouvez écrire un appender ADO.NET personnalisé et remplacer la chaîne de connexion:
public new string ConnectionString {
get {
return base.ConnectionString;
}
//you could set your own connection string here
set {
base.ConnectionString = ConfigurationManager.ConnectionStrings ["Sql"].
ConnectionString;
}
}
Vous pouvez visiter http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/ pour un exemple complet
Cela devrait être possible dans la version 1.2.11. Voici le lien vers le problème:
Vous pouvez le faire en héritant de AdoNetAppender.
Voir le blog "Ken Burkhardt" ci-dessous pour plus de détails.
http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html