log4net no funciona


Hey tengo esta configuración en mi 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>

Pero log4net no funciona. Mi proyecto compila bien, y no recibo errores de depuración tampoco. Las líneas donde le digo a log.debug("somemessage") se ejecutan bien, pero no puedo encontrar el archivo mylog.log, así que ¿dónde está?

Author: Philipp M, 2010-10-10

11 answers

Uno de los gotcha para este tipo de cosas es asegurarse de agregar el atributo XmlConfigurator al ensamblado colocando la siguiente línea en su AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator]

De lo contrario log4net nunca se activa.

 273
Author: Kirk Woll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-15 18:47:35

Supongo que log4net no está registrando en absoluto, o el archivo no está terminando donde se espera.

En primer lugar, ¿has llamado realmente

XmlConfigurator.Configure()

¿En algún lugar de tu código? Si el fragmento xml anterior está en el archivo de configuración de la aplicación, esta llamada hará el truco. Si el fragmento xml está en su propio archivo, necesitará usar la sobrecarga .Configure(string) que toma la ruta al archivo. Sin esta llamada (o aparentemente el atributo de nivel de ensamblaje mencionado por Kirk Woll), entonces log4net no registrará en absoluto.

Si cree que todo esto está hecho, y log4net debería estar registrando, entonces tal vez debería poner una ruta completa para el archivo de registro mientras depura más. Eso le permitirá estar seguro de dónde debe estar el archivo .

 47
Author: Rob Levine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-09 23:33:23

Hay otro pequeño gotcha, ver aquí: http://logging.apache.org/log4net/release/manual/configuration.html#dot-config

El método [assembly: log4net.Config.XmlConfigurator] no funciona con app.config. Si configura log4net desde la aplicación.config, debe usar el método log4net.Config.XmlConfigurator.Configure().

 30
Author: Amir Abiri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-21 18:42:09

Aquí está mi lista de verificación para cuando log4net está demostrando ser recalcitrante:

  • asegúrese de que log4net.el archivo de configuración se copia en la carpeta bin\ al compilar (se establece en 'Copiar si es más reciente' en el compilador)
    • cuando se trata de código instalado, asegúrese de que el log4net.config llegó para el viaje (establecido en 'Contenido' en el compilador)
  • asegúrese de que el usuario que el proceso se ejecuta como tiene derechos de escritura en la carpeta donde se escribirán los registros
  • en caso de duda, dar permisos promiscuos para c:\temp\ and get everything to log to there ()
  • inicia Sysinternal/Dbgview.exe para ver si eso te dice algo
 14
Author: earthling42,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-23 19:14:52

Para un proyecto ASPNET MVC añadiendo

Log4net.Config.XmlConfigurator.Configure ();

A lo Global.asax.cs también ayuda:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();

        **log4net.Config.XmlConfigurator.Configure();**
    }
}
 7
Author: Oladipo Olasemo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-06 15:26:57

He tenido experiencias donde los sistemas de registro fallan silenciosamente sin generar excepciones. Supongo que esto tiene sentido porque si el registrador está registrando errores, ¿cómo puede registrar un error que no puede realizar el registro?

Por lo tanto, si el archivo no se crea en el disco, comience por buscando en los permisos del sistema de archivos para asegurarse de que el usuario bajo el que se ejecuta su aplicación pueda escribir un nuevo archivo en esa ubicación de disco.

Para fines de prueba, es posible que desee crear manualmente el archivo en el disco en el que se debe escribir y abrir permisos para que todos escriban en él. Si el registrador comienza a escribir en él, entonces usted sabe que está basado en permisos en lugar de basado en la configuración.

 5
Author: John K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-09 23:35:18

Estos son los pasos que finalmente hicieron que mi registro de archivos funcionara:

  • -Compruebe AssemblyInfo.cs contiene el siguiente atributo. [asamblea: log4net.Config.XmlConfigurator] . Esto carga log4net.
  • Compruebe que el directorio log tiene permisos de escritura.
  • Compruebe que el registrador tiene un formato especificado. Esto se hace comprobando que cada elemento de su configuración tiene un elemento layout especificado. Eg:

<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>

  • Finalmente, intente activar el registro interno de log4net para habilitar el registro de consola y comprobar la consola. Para hacer esto, agregue <add key="log4net.Internal.Debug" value="true"/> a su appSettings.
 5
Author: Echilon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-02 06:12:34

Probé todo lo anterior, pero nada funcionó. Añadiendo esta línea en app.config's configSections la sección funcionó para mí.

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" />

Asegúrese de que Version y PublicKeyToken es correcto

 1
Author: Reyan Chougle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-11 07:59:18
<param name="File" value="mylog.log" />

Está diciendo "escribir mylog.log to actual folder"(en inglés). Esto significa que si su aplicación web está bajo IIS, entonces el registro se escribirá en C:\inetpub\wwwroot\appname\mylog.registro.

Si el archivo de registro no está allí, entonces tal vez la cuenta en la que se está ejecutando la aplicación no tiene permiso de escritura en la carpeta. Puede ejecutar Process Monitor desde SysInternals para ver si y dónde se escribe un archivo.

También ejecute VS en modo de depuración, para ver si se producen excepciones (Debug- > Exceptions - > CLR Exceptions, marque Lanzar).

 0
Author: Tomas Voracek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-09 23:35:41

En mi caso me olvido de configurar log4Net.config propiedades del archivo como "Contenido" por lo que el archivo no se incluyó en la implementación. Así que presta atención:

Compile action : Content
 0
Author: Marco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-22 11:02:41

También después de algunas horas, me di cuenta de por qué no estaba funcionando para mí...

Tenía:

public static class Program
{

    private static CommunicationManager _bcScanner = new CommunicationManager();
    private static ILog _log = LogManager.GetLogger(typeof(Program));
    private static SocketServer socketListener;

Pero debería ser:

public static class Program
    {
        private static ILog _log = LogManager.GetLogger(typeof(Program));
        private static CommunicationManager _bcScanner = new CommunicationManager();
        private static SocketServer socketListener;

Así que asegúrese de que el ILog está en la primera línea....

 -6
Author: Jeroen Bakker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-02 06:16:36