Pourquoi toutes mes log4net niveaux faux?
Je suis l'aide de log4net dans mon ASP.NET MVC3 projet, mais toutes les propriétés de journalisation comme IsDebugEnabled
== false
Dans mon AssemblyInfo j'ai:
[assembly: XmlConfigurator(Watch = true)]
Dans mon journal de classe, j'ai
public Log4NetLogger()
{
log4net.Config.XmlConfigurator.Configure();
Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
Mes config trucs dans le Web.La Config est:
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=152368
-->
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
</sectionGroup>
</configSections>
<log4net debug="false">
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="{removed}" />
<commandText value="INSERT INTO Logging ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<!--Possible levels:-->
<!--DEBUG-->
<!--INFO-->
<!--WARN-->
<!--ERROR-->
<!--FATAL-->
<root>
<level value="All" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
</applicationSettings>
</configuration>
J'ai déjà frustrés à un point de simplement vouloir
public Log4NetLogger()
{
Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Logger.IsDebugEnabled = true;
}
Cependant bien sûr Logger.IsDebugEnabled
n'a pas de setters :/
Que dois-je faire pour obtenir cette fichue chose à travailler?
- Pouvez vous s'il vous plaît approuver l'une des réponses ci-dessous si vous avez trié ce problème?
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce même problème. Je me déplace en utilisant les dessous de la ligne de code dans le
Application_Start
méthode dans le monde.asax.cs (en supposant que ses un .Net application web)Changer votre ligne de la suite dans
AssemblyInfo.cs
:et mettre log4net de configuration dans le fichier.
Log4net attend sa section de configuration pas à être regroupés. Parce que dans votre configuration, vous avez mis vos log4net section à l'intérieur d'un
ApplicationSettingsGroup (applicationSettings)
log4net ne trouverez pas de sa configuration. Vous pouvez déplacer le log4net la section en dehors du groupe ou vous pouvez spécifier le groupe lors de l'appel deXmlConfigurator.Configure
:Il semble que vous avez oublié de fichier de configuration de paramètre de propriété changements Copie vers le Répertoire de Sortie = "Copy"
Veuillez vérifier ce paramètre image pour plus de détails.
Config paramètre de fichier de Propriétés
Niveaux de journal sont sensibles à la casse, donc au lieu de:
<level value="All" />
devrait être
<level value="ALL" />
Je trouve aussi qu'il est beaucoup plus facile de créer un log4net fichier de configuration. Créez un fichier appelé log4net.config et définir la propriété de Copie vers le Répertoire de Sortie à Copie toujours -- (copie de votre configuration à partir de l'App.config dans ce fichier)
Puis, lors de la configuration de la configuration d'utilisation:
XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
Je n'ai jamais vu
<level value="All" />
avant, d'habitude je viens de mettre envalue
à l'un des niveaux (puisqu'ils sont compris les niveaux au-dessus, ou en dessous d'eux comme vous l'avez indiqué dans votre config, dans le niveau de la pile). Quelque chose comme ceci:Vous pouvez également essayer de tester explicitement avec un enregistreur, juste pour voir si le problème est peut-être autre chose. Quelque chose de simple adjacente à la
appender
nœud(s) comme ceci:Puis, quand le tester dans votre code, vous devez créer l'enregistreur de données comme ceci:
<level value="ALL" />
avec succès depuis des années 🙂Changer votre ligne de la suite dans AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator une Montre (=true)]
Assurer log4net dll est ajouté et Aussi mettre log4net configuration web.fichier de configuration que
Vous n'a pas pu initialiser log4net dans votre application. Cela peut être initialisé explicitement en plaçant en dessous à "Application_Start',
Il n'y a pas de définition pour IsDebugEnabled car il est en lecture seule..
Utilisation log4net.Config.XmlConfigurator.Configurer(); dans la méthode, avant d'utiliser le journal
et dans l'app.Config le réglage doit être :
Il vous manque la balise d'ouverture d'
applicationSettings
. Que pourrait être la causeDans mon cas, cela était dû au fait que la
<configSections>
n'était pas la première balise de la<configuration>
section. Cela empêche le nom de la section log4net d'être reconnus. Pour le journal exemple montre la IsDebugEnabled et tous les autres comme des booléen par défaut false.Cela devrait être comme cela.
si la classe fichier journal (Log4NetLogger) est dans une seule bibliothèque de classe, puis le code:
[assembly: log4net.Config.XmlConfigurator(C....
devrait être dans la même classe de la bibliothèque.
par exemple:
lib 1: mon.web (un projet mvc)
lib 2: mon.commune (un projet de bibliothèque de classes)
si vous enroulez logmanager code dans mon.commune, puis "[assembly: log4net.Config.XmlConfigurator(C..." DOIT ÊTRE DANS mon.commune, si vous le mettez dans mon.web, ça ne marchera pas!
Edit:
L'utilisation de l'ensemble des fichiers de configuration (app.config, web.config, log4net.config, etc) est du contexte. Donc, si vous avez une application de l'appel d'une bibliothèque de classe le fichier de configuration qui sera utilisée est la .Config de l'Application du projet de ne pas la bibliothèque de classe.
Un autre exemple, si vous êtes de l'Unité de Test d'une application, le contexte est le projet de tests Unitaires et c'est quel fichier de configuration, il ne faut pas l'application de la config.
J'ai eu le même problème. J'ai été en utilisant un fichier séparé et l'a nommé journal.config. Tout ce que j'avais à faire était de marquer le fichier de propriété "Copier dans le Répertoire de Sortie" pour "Copy" dans l'explorateur de solutions de Visual Studio. Qui a fait le tour pour moi.