ejemplo coloredconsoleappender c# .net-4.0 log4net

c# - coloredconsoleappender - log4net levels



log4net no funciona (11)

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

  • asegúrese de que el archivo log4net.config se copie a la carpeta bin / al construir (establecido en ''Copiar si es más reciente'' en el compilador)
    • cuando se trata de un código instalado, asegúrese de que log4net.config aparezca para el viaje (configurado en ''Contenido'' en el compilador)
  • asegúrese de que el usuario que ejecuta el proceso tenga derechos de escritura en la carpeta donde se escribirán los registros
  • en caso de duda, otorgue permisos promiscuos a c: / temp / y obtenga todo para iniciar sesión allí ()
  • dispara Sysinternal / Dbgview.exe para ver si eso te dice algo

Hola, 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 tampoco tengo errores de depuración. Las líneas donde le digo a log.debug("somemessage") se ejecuta bien, pero no puedo encontrar el archivo mylog.log , entonces, ¿dónde está?


En mi caso, olvidé configurar las propiedades del archivo log4Net.config como "Contenido" para que el archivo no se incluyera en la implementación. Así que ponle atención:

Compile action : Content


Estos son los pasos que eventualmente hicieron funcionar mi registro de archivos:

  • -Verificar AssemblyInfo.cs contiene el siguiente atributo. [assembly: log4net.Config.XmlConfigurator] . Esto carga log4net.
  • Compruebe que el directorio de registro tenga permisos de escritura.
  • Compruebe que el registrador tiene un formato especificado. Esto se hace comprobando que cada elemento en su configuración tiene un elemento de diseño especificado. P.ej:

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

  • Finalmente, intente activar el registro interno de log4net para habilitar el registro de la consola y verificar la consola. Para hacer esto, agregue <add key="log4net.Internal.Debug" value="true"/> a su appSettings .


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 examinar los permisos del sistema de archivos para asegurarse de que el usuario con el que se está ejecutando la aplicación pueda escribir un nuevo archivo en esa ubicación del disco.

Para fines de prueba, es posible que desee crear manualmente el archivo en el disco en el que debe escribirse y abrir permisos para que todos puedan escribir en él. Si el registrador comienza a escribirle, entonces sabrá que está basado en permisos y no en la configuración.


Intenté todo lo anterior pero nada funcionó. Agregar esta línea en la sección de config.config de configSections 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 sean correctos


Para agregar un proyecto ASPNET MVC

log4net.Config.XmlConfigurator.Configure ();

a 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();** } }


Supongo que log4net no está iniciando sesión o que el archivo no termina donde lo espera.

En primer lugar, ¿realmente has llamado

XmlConfigurator.Configure()

en cualquier parte de tu código? Si el fragmento de 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, deberá usar la .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 iniciará sesión en absoluto.

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


También después de algunas horas, descubrí por qué no funcionaba para mí ...

tuve:

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;

Asegúrate de que el ILog esté en la primera línea ...


Un problema para este tipo de cosas es asegurarse de agregar el atributo XmlConfigurator al ensamblaje colocando la siguiente línea en su AssemblyInfo.cs :

[assembly: log4net.Config.XmlConfigurator]

De lo contrario, log4net nunca se activará.


<param name="File" value="mylog.log" />

está diciendo "escriba mylog.log en la carpeta actual". Esto significa que si su aplicación web está en IIS, el registro se escribirá en C: / inetpub / wwwroot / appname / mylog.log.

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

También ejecute VS en modo de depuración, para ver si se lanzan excepciones (Depurar-> Excepciones-> Excepciones de CLR, verificar lanzadas).