Question

J'ai des difficultés à faire fonctionner log4net à partir d'ASP.NET 3.5. C’est la première fois que j’essaie d’utiliser log4net, j’ai le sentiment qu’il me manque un morceau du puzzle.

Mon projet fait référence à l'assemblage log4net et, autant que je sache, il est déployé avec succès sur mon serveur.

Mon Web.config contient les éléments suivants:

  <configSections>
    <section name="log4net"
      type="log4net.Config.Log4NetConfigurationSectionHandler
      , log4net"
      requirePermission="false"/>
  </configSections>

  <log4net>
    <appender name="InfoAppender" type="log4net.Appender.FileAppender">
      <file value="..\..\logs\\InfoLog.html" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
          value="%d [%t] %-5p %c [%x] - %m%n" />
      </layout>
    </appender>
    <logger name="_Default">
      <level value="INFO" />
      <appender-ref ref="InfoAppender" />
    </logger>
  </log4net>

J'utilise le code suivant pour tester le consignateur:

using log4net;
using log4net.Config;

public partial class _Default : System.Web.UI.Page
{
    private static readonly ILog log = LogManager.GetLogger("_Default");

    protected void Page_Load(object sender, EventArgs e)
    {
        log.Info("Hello logging world!");
    }
}

Dans mon Global.asax, je fais ce qui suit:

void Application_Start(object sender, EventArgs e) 
{
    log4net.Config.XmlConfigurator.Configure();
}

À ce stade, je ne peux pas penser à ce que je pourrais mal faire d'autre. Le répertoire dans lequel je tente de stocker le journal est accessible en écriture et même si j’essaie d’utiliser différents répertoires, j’obtiens le même résultat: aucun fichier, aucun journal.

Des suggestions? : -)

Modifier: j'ai essayé plusieurs formats différents pour le chemin d'accès & amp; nom du fichier journal, dont certains incluent ".. \ .. \ InfoLog.html", "InfoLog.html", "logs \ InfoLog.html", etc., juste au cas où quelqu'un se demanderait si c'était le cas. problème.

Éditer: J'ai rajouté le nœud de journalisation racine dans la section log4net, je l'ai ignoré par accident lors de la copie à partir des exemples. Le noeud de journalisation racine se présente comme suit:

<root>
  <level value="INFO" />
  <appender-ref ref="InfoAppender" />
</root>

Même avec cela, cependant, je n'ai toujours pas de chance.

Était-ce utile?

La solution

L’enregistreur racine est obligatoire, je pense. Je pense que la configuration échoue car la racine n’existe pas.

Un autre problème potentiel est que Configure ne pointe pas sur Web.config.

Essayez plutôt de configurer (Server.MapPath ("~ / web.config")).

Autres conseils

Cela ressemble beaucoup à un problème d'autorisations de fichiers. Si vous spécifiez un nom de fichier sans chemin d'accès, log4net écrira dans le répertoire racine de l'application Web. Essayez ça. Sauf réussite, je vous conseillerais d'activer le débogage interne de log4net en ajoutant ce qui suit dans votre fichier web.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

Ensuite, déployez l'application compilée en mode débogage et exécutez le débogueur distant de visual studio pour voir les erreurs éventuelles.

Je viens de passer 3 heures à essayer de résoudre ce problème, c’est la fin du formatage de web.config.

J'avais ça et ça n'a pas marché:

<section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
      <section name="log4net"
        type="log4net.Config.Log4NetConfigurationSectionHandler
      , log4net"
        requirePermission="false"/>

le changer pour cela le corrige:

 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" requirePermission="false"/>

ennuyeux !!

Juste pour info: le chemin du fichier doit être formaté comme suit:

<file value="..\\..\\logs\\InfoLog.html" />

Un didacticiel de configuration simple tiré de CodeProject

Je n'ai pas le fichier Global.asx pour s'exécuter en .net 3.5

c'est mon code ... Je configure le log4net dans un fichier séparé log4net.config

// Configure log4net using the .config file
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

//My Web Services class name
private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Service1");

J'ai eu le même problème (frustrant). J'ai déplacé la racine en haut de la section de configuration de log4net et tout a fonctionné. De plus, moi aussi, j'avais la racine et un élément de journalisation, ce qui a entraîné deux lignes à chaque fois que j'ai appelé le consignateur. J'ai enlevé l'élément de journalisation et je garde simplement la racine et son bon fonctionnement.

Pourquoi ne pas créer le journal avec le type de page, comme ceci:

private static readonly ILog log = LogManager.GetLogger(typeof(_Default));

C'est ce que j'ai dans Global.ASX. Tout fonctionne dans asp.net 3.5

<%@ Application Language="C#" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
         log4net.Config.XmlConfigurator.Configure(); 
    }

    void Application_End(object sender, EventArgs e) 
    {
        //  Code that runs on application shutdown
        log4net.LogManager.Shutdown();
    }

    void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs
    }

    void Session_Start(object sender, EventArgs e) 
    {
        // Code that runs when a new session is started
    }

    void Session_End(object sender, EventArgs e) 
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer 
        // or SQLServer, the event is not raised.
    }
</script>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top