Nous utilisons log4net et souhaitons spécifier sa configuration dans un fichier de configuration externe (comme nous l'avons fait avec d'autres sections). Pour ce faire, nous avons changé la section log4net dans App.config en:
...
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
...
<log4net configSource="Log.config" />
...
Et dans le fichier Log.Config (même répertoire que App.config), nous avons:
<log4net>
<appender name="General" type="log4net.Appender.FileAppender">
<file value="myapp.log" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<appender-ref ref="General" />
</root>
</log4net>
Cependant, lorsque nous exécutons l'application, aucun fichier journal n'est créé (et aucune journalisation n'est effectuée). Il n'y a aucun message d'erreur émis vers la console.
Si nous remettons le contenu du fichier Log.config dans App.config (en remplaçant la première ligne de code ci-dessus), cela fonctionne comme prévu. Une idée pourquoi cela ne fonctionne pas dans un fichier externe?
Réponses:
Avez-vous l'attribut suivant dans votre
AssemblyInfo.cs
fichier:et un code comme celui-ci au début de chaque classe qui nécessite une fonctionnalité de journalisation:
J'ai un article de blog contenant ceci et d'autres informations ici .
la source
Il y a un défaut ouvert sur ce problème. Log4Net ne prend pas en charge l'attribut configSource des éléments de configuration. Pour utiliser une solution de fichier de configuration purement, vous utilisez la clé log4net.Config dans appSettings.
Étape 1: Incluez la définition de la section de configuration normale:
Étape 2: Utilisez la clé magique log4net.Config dans appSettings.
Étape 3: Contribuez à un correctif pour corriger la gestion de configSource.
la source
L'étape qui a été manquée est
cela entraînera l'utilisation du configSource. Assurez-vous de l'appeler une fois avant d'appeler GetLogger ();
la source
Assurez-vous que votre fichier log4net.config est défini avec les propriétés suivantes:
Action de création: contenu
Copier dans le répertoire de sortie: Copier toujours
la source
Soit utiliser,
ou juste,
Dans les deux cas, le fichier, Log4Net.config, devrait être là dans le répertoire de sortie. Vous pouvez le faire en définissant les propriétés du fichier Log4Net.config dans l'explorateur de solutions. Action de construction - Contenu et copie dans le répertoire de sortie - Copie toujours
la source
Attention à ce problème ...
Dans mon cas, tout a été configuré correctement. Le problème est que j'ai utilisé Web Deploy dans Visual Studio 2013 pour télécharger le site sur WinHost.com et il a réinitialisé les ACL sur le serveur. Cela a à son tour révoqué toutes les autorisations sur les dossiers et les fichiers - log4net n'a pas pu écrire le fichier.
Vous pouvez en savoir plus ici:
Comment empêcher Web Deploy / MSBuild de perturber les autorisations du serveur
J'ai demandé à l'équipe d'assistance de réinitialiser les ACL, puis log4net a commencé à cracher des journaux. :)
la source
En supposant que vous disposiez d'un fichier de configuration externe appelé log4net.config qui est copié dans votre répertoire de déploiement, vous pouvez le configurer comme suit:
la source
J'ai eu le même problème, en plus d'avoir
dans le projet en cours, j'avais également la ligne suivante dans un projet de référence:
Lorsque j'ai supprimé cette ligne dans les projets référencés, les journaux commencent à apparaître.
la source
Il est également possible d'activer un mode de débogage pour
log4net
. Insérez-le dans le fichier App.config:et vous obtiendrez au moins des messages d'erreur, à partir desquels vous pourrez déduire ce qui n'a pas fonctionné. Dans mon cas , je simplement oublié de mettre
Copy to output directory
àCopy Always
.la source
@Mitch, il s'avère qu'il y a un fichier avec la déclaration [assembly: ...], mais il n'a pas la propriété ConfigFile.
Une fois que je l'ai ajouté et l'ai pointé vers Log.config, cela a commencé à fonctionner. J'aurais pensé que cela fonctionnerait comme toutes les autres sections de configuration (c'est-à-dire AppSettings) et accepterait les fichiers de configuration externes sans modification.
Nous n'avons pas la deuxième déclaration que vous avez mentionnée, car nous l'enveloppons dans un fournisseur de journal statique global.
la source
Dans mon cas, j'ai reçu ce message d'erreur:
Et
log4net.config
le fichier se trouvait dans le projet Visual Studio 2017, mais lorsque j'ai vérifié le fichier dans lebin\Debug
dossier, je ne l'ai pas trouvé.Ma configuration d'assemblage d'origine était comme ceci:
Après un certain temps de recherche, je le change comme suit et cela fonctionne:
la source
[assembly: log4net.Config.XmlConfigurator (ConfigFile = "Log4Net.config")]
changer Copier dans le répertoire de sortie en Copier si plus récent
la source
Il convient également de souligner que dans une application Web, il se trouve dans le répertoire racine, pas dans le dossier bin, alors assurez-vous que c'est là que vous placez le fichier de configuration.
la source