2009-08-10 11 views
5

pregunta realmente simple -> parece que no puedo obtener ningún dato de Log4Net en mi aplicación ASP.NET. Tengo una ASP.NET simple sitio web, que hace referencia a una biblioteca de clases. en esta biblioteca de clases, tengo algunas líneas que llaman al registrador.No puedo conseguir que Log4Net funcione en mi sitio web ASP.NET :(

estoy tratando de leer los datos de salida log4net en mi Visual 2008 depuración de salida ventana estudio.

Aquí está mi código y mi configuración ...

//Class Library project 
//File: Foo.cs 
public class FooService 
{ 
    private static readonly ILog log = LogManager.GetLogger(typeof(FooService)); 

    public FooService() 
    { 
     // NOTE: To play with my L4N settings, I'll call Debug once, then Info once. 

     log.Info("Starting Constructor"); 

     // ... snip ... 

     log.Debug("Leaving Constructor"); 
    } 
} 


// ASP.NET Website project 
// File: global.asax 
void Application_Start(object sender, EventArgs eventArgs) 
{ 
    log4net.Config.XmlConfigurator.Configure(); 
} 

// File: Whatever.aspx.cs 
// A delegate method (when a user clicks a button) creates the FooService() instance. 

// File: web.config 
<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" requirePermission="false" /> 

    // .... 

</configSections> 


<log4net> 
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
     <mapping> 
      <level value="ERROR" /> 
      <foreColor value="White" /> 
      <backColor value="Red, HighIntensity" /> 
     </mapping> 
     <mapping> 
      <level value="DEBUG" /> 
      <backColor value="Green" /> 
     </mapping> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" /> 
    </appender> 

    <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender"> 
     <mapping> 
      <level value="ERROR" /> 
      <foreColor value="White" /> 
      <backColor value="Red, HighIntensity" /> 
     </mapping> 
     <mapping> 
      <level value="DEBUG" /> 
      <backColor value="Blue" /> 
     </mapping> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 


    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="App_Data\logging\log-append.txt"/> 
    </appender> 

    <!-- Setup the root category, add the appenders and set the default level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="OutputDebugStringAppender" /> 
     <appender-ref ref="ConsoleAppender" /> 
     <appender-ref ref="ColoredConsoleAppender" /> 
    </root> 
    <!-- Specify the level for some specific categories --> 
    <logger name="DotNetOpenAuth"> 
     <level value="ALL" /> 
    </logger> 
</log4net> 

Saludos por cualquier ayuda o sugerencia ...

EDITAR: Agregó el RollingLogFileAppender.

+0

¿Por qué está usando ColoredConsoleAppender en una aplicación web? – RichardOD

+0

Porque estoy esperando que console.out se redirija a esta extraña ventana de salida del depurador .... –

Respuesta

5

Tuve el mismo problema y creo que estaba buscando el web.config equivocado o algo así. Finalmente separé log4net.config de web.config y puse una ruta a él \ inetpub \ Logs \ log4net.config y todo está bien.

UDP A PETICIÓN: editado a partir de una versión un poco más complicada.

<?xml version="1.0" encoding="utf-8"?> 
<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level (%logger:%line) - %message%newline" /> 
     </layout> 
    </appender>\ 

    <root> 
     <!--ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF--> 
     <level value="ALL" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 

y se configura en el código de la siguiente manera:

 var logpath = WebConfigurationManager.AppSettings["LogConfigPath"] ?? @"\Inetpub\Logs\log4net.config"; 
     var finfo = new System.IO.FileInfo (logpath); 
     XmlConfigurator.Configure(finfo); 
+0

tio - ¿u terminan el registro en el Visual Studio (depurador) ¿Ventana de salida? o a un archivo? –

+0

Sí, estoy usando TraceAppender con el recurso OutputDebugString y lo veo en VS o con http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx – kenny

+0

wow. esa aplicación sysinternals es increíble :) me encantan las cosas y aquí hay otra cosa :) ¿Puedes por favor elaborar en detalle (por ejemplo, publicar una captura de pantalla de la configuración de tu archivo .config log4net), por favor? –

5

ASP.Net tiene restricción en el uso del sistema de archivos de acceso, a fin de tratar de señalar explícitamente directorio bajo App_Data (eran está permitido) Aquí mi muestra de trabajo:

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="App_Data\logging\log-file.txt"/> 

O con vuelco

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="App_Data\logging\log-append.txt"/> 
+0

Heh - amigo. Nunca dije que estoy usando el sistema de archivos :) ve a buscar otra vez ..... –

+0

Solo prueba esta muestra de trabajo, después de eso podrías separar la configuración que no funciona de la seguridad no ajustada. – Dewfy

+0

ok ... voy a intentar esto ... hmm. algunos errores en la ventana OUTPUT ... og4net: ERROR XmlHierarchyConfigurator: No se pudo encontrar ningún apéndice llamado [RollingFileAppender]. log4net: ERROR XmlHierarchyConfigurator: Appender nombrado [RollingFileAppender] no encontrado. log4net: ERROR XmlHierarchyConfigurator: No se puede encontrar la propiedad [asignación] para ajustar objeto en [log4net.Appender.OutputDebugStringAppender] log4net: XmlHierarchyConfigurator ERROR: No se puede encontrar la propiedad [asignación] para ajustar objeto en [log4net.Appender.OutputDebugStringAppender] –

0

Hay al menos 2 problemas posibles:

  • La forma en que se especifica la dirección para el archivo, intente utilizar un absoluto ruta en su lugar.
  • El proceso que realiza la llamada necesita derechos para modificar el archivo. Compruebe que la cuenta de usuario que escribe en el archivo de registro tenga los derechos para hacerlo.

Para depurarlo crearía y vaciaría el directorio, le daría a todos el control total, configuraría para iniciar sesión en ese directorio. Luego pruébelo, vea que funciona, luego ajuste gradualmente la seguridad a un nivel aceptable.

3

Ok, encontré la respuesta. Necesitaba usar un TraceAppender. archivo de configuración

La aplicación se puede utilizar para controlar lo que se utilizan realmente los oyentes . Consulte la documentación de MSDN para la clase Trace para obtener detalles de sobre la configuración del sistema de rastreo .

Los eventos se escriben utilizando el método System.Diagnostics.Trace.Write (cadena, cadena) método. El nombre del registrador del evento es pasado como el valor para el nombre de categoría al método de escritura.

Aquí está mi archivo de configuración de datos ...

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 


    <!-- Setup the root category, add the appenders and set the default level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 
+0

+ 1- ¡Como has dicho, esto funciona! – RichardOD

0

que añade el archivo Global.asax siguiente línea, y funciona .. !! log4net.Config.XmlConfigurator.Configure();

+1

Er ... Ya tenía esa lista en mi primer post. Dicho esto, he dejado de usar Log4Net y ahora estoy usando NLog ... es SOOOO mucho mejor IMO :) Y siempre ha funcionado (además es más nuevo y sigue recibiendo amor por el desarrollo). –

Cuestiones relacionadas