Hey, j'ai cette configuration dans mon web.config
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="mylog.log" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="" />
<param name="Footer" value="" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n" />
<param name="Footer" value="[Footer]\r\n" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
mais log4net ne fonctionne pas. Mon projet se compile bien, et je n'obtiens aucune erreur de débogage non plus. Les lignes où je dis de log.debug("somemessage")
s'exécuter correctement, mais je ne trouve pas le mylog.log
fichier, alors où est-il?
Réponses:
Un truc pour ce type de chose est de s'assurer d'ajouter l'
XmlConfigurator
attribut à l'assembly en plaçant la ligne suivante dans votreAssemblyInfo.cs
:Sinon, log4net ne s'active jamais.
la source
AssemblyInfo
dès que vous y avez pensé.Je suppose que soit log4net ne se connecte pas du tout, soit le fichier ne se termine pas là où vous l'attendez.
Premièrement, avez-vous réellement appelé
n'importe où dans votre code? Si l'extrait de code XML ci-dessus se trouve dans le fichier de configuration de l'application, cet appel fera l'affaire. Si l'extrait de code XML est dans son propre fichier, vous devrez utiliser la
.Configure(string)
surcharge qui prend le chemin du fichier. Sans cet appel (ou apparemment l'attribut de niveau d'assemblage mentionné par Kirk Woll), alors log4net ne sera pas du tout journalisé.Si vous pensez que tout est fait et que log4net devrait se connecter, vous devriez peut-être mettre un chemin complet pour le fichier journal pendant que vous déboguez plus loin. Cela vous permettra d' être sûr où le fichier doit être.
la source
Il y a un autre petit truc, voir ici: http://logging.apache.org/log4net/release/manual/configuration.html#dot-config
la
[assembly: log4net.Config.XmlConfigurator]
méthode ne fonctionne pas avec app.config. Si vous configurez log4net depuis app.config, vous devez utiliser lalog4net.Config.XmlConfigurator.Configure()
méthode.la source
Voici ma liste de contrôle pour savoir quand log4net s'avère récalcitrant:
la source
Pour un projet ASP.NET MVC ajoutant
à Global.asax.cs aide également:
la source
Voici les étapes qui ont finalement fait fonctionner la journalisation de mes fichiers:
<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>
<add key="log4net.Internal.Debug" value="true"/>
à votreappSettings
.la source
J'ai eu des expériences où les systèmes de journalisation échouent silencieusement sans lever d'exceptions. Je suppose que cela a du sens car si l'enregistreur enregistre des erreurs, comment peut-il enregistrer une erreur qu'il est incapable d'effectuer la journalisation?
Donc, si le fichier n'est pas créé sur le disque, commencez par examiner les autorisations du système de fichiers pour vous assurer que l'utilisateur sous lequel votre application s'exécute peut écrire un nouveau fichier sur cet emplacement du disque.
À des fins de test, vous voudrez peut-être créer manuellement le fichier sur le disque sur lequel écrire et ouvrir des autorisations pour que tout le monde puisse y écrire. Si l'enregistreur commence à y écrire, vous savez qu'il est basé sur l'autorisation plutôt que sur la configuration.
la source
De mon côté, j'ai oublié de marquer le fichier de configuration à copier pendant la compilation de l'application.
Faites un clic droit sur le fichier log4net.config, sélectionnez la propriété, puis choisissez Copier dans le répertoire de sortie pour être Copier XXXX
la source
J'ai essayé tout ce qui précède mais rien n'a fonctionné. L'ajout de cette ligne dans la
configSections
section app.config a fonctionné pour moi.Assurez-vous que
Version
etPublicKeyToken
est correctla source
dit "écrire mylog.log dans le dossier réel". Cela signifie que si votre application Web est sous IIS, le journal sera écrit dans C: \ inetpub \ wwwroot \ appname \ mylog.log.
Si le fichier journal n'est pas là, alors peut-être que le compte sous lequel l'application s'exécute n'a pas l'autorisation d'écriture sur le dossier. Vous pouvez exécuter Process Monitor à partir de SysInternals pour voir si et où un fichier est écrit.
Exécutez également VS en mode débogage, pour voir si des exceptions sont levées (Debug-> Exceptions-> CLR Exceptions, cochez Thrown).
la source
Dans mon cas, j'ai oublié de définir les propriétés du fichier log4Net.config comme "Contenu" afin que le fichier ne soit pas inclus dans le déploiement. Alors faites attention à cela:
la source
Malheureusement, rien de ce qui précède n'a aidé. La configuration explicite dans la classe à enregistrer en plus des suggestions de paramètres précédentes a fait l'affaire pour moi.
la source
Aussi après quelques heures, j'ai compris pourquoi cela ne fonctionnait pas pour moi ...
j'ai eu:
mais ça devrait être:
Assurez-vous donc que l'ILog est sur la première ligne ...
la source