Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

155
Vistas
Forzar a Log4Net a generar eventos específicos

Uso log4net para el registro de diagnóstico en mis aplicaciones, es decir, si log4net no funciona, la aplicación funciona bien de todos modos. Tengo un registro de seguimiento de auditoría separado que bloqueará la aplicación si falla el seguimiento de auditoría.

Quiero incluir mensajes de seguimiento de auditoría en mis registros de log4net, pero tengo un dilema: quiero que los mensajes de seguimiento de auditoría se emitan con la prioridad más alta (como crítica), pero no quiero que los mensajes de seguimiento de auditoría se representen como fatales errores
Deben emitirse con nivel INFO, ya que no son errores críticos, sino simplemente mensajes obligatorios.

Estaba investigando las partes internas de log4net y me topé con el método protegido Logger.Forcedlog :

 /// <summary> /// Creates a new logging event and logs the event without further checks. /// </summary> /// <param name="logEvent">The event being logged.</param> /// <remarks> /// <para> /// Delivers the logging event to the attached appenders. /// </para> /// </remarks> protected virtual void ForcedLog(LoggingEvent logEvent) { logEvent.EnsureRepository((ILoggerRepository) this.Hierarchy); this.CallAppenders(logEvent); }

Puedo llamar a este método a través de la reflexión y pasar por alto cualquier verificación de nivel, pero me siento muy culpable.

¿Existen alternativas "más limpias"?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Gracias a @pfx por la idea, lo que terminó funcionando para mí fue, de hecho, declarar un nivel de registro personalizado.
Dado que no es exactamente lo que estaba solicitando, estoy recompensando la respuesta a pfx, pero estoy informando mi solución aquí en caso de que pueda ayudar a alguien más:

 // declares a custom Log4Net Level named Audit with the same priority of Fatal errors private static readonly Level AuditTrailLevel = new Level(Level.Fatal.Value, "AUDIT"); // to be used as: _log.Logger.Log(null, AuditTrailLevel, message, exception);

¡Dulce y sencillo!

over 4 years ago · Santiago Trujillo Denunciar

0

Puede configurar un registrador con nombre, por ejemplo, AuditLog , con o sin una configuración explícita en la configuración de log4net .
De forma predeterminada, este registrador heredará el nivel de registro del registrador raíz o uno configurado.

Justo después de aplicar la configuración de log4net , configura/anula ese registrador específico con el nivel de registro (mínimo) que necesita.

Aplica la configuración, por ejemplo, desde un archivo.

 var repository = log4net.LogManager.GetRepository(Assembly.GetExecutingAssembly()); log4net.Config.XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));

Inmediatamente después de la configuración anterior, cambia el nivel de registro del registrador AuditLog mediante programación, por ejemplo, a Info .

 var auditLog = repository.GetLogger("AuditLog") as Logger; auditLog.Level = log4net.Core.Level.Info;

En cualquier parte de su aplicación cuando inicie sesión a través de este registrador AuditLog , se considerará su nivel establecido mediante programación. La siguiente llamada para registrar un mensaje informativo pasará cuando cumpla con el nivel de registro de Info que se ha establecido.

 var auditLog = LogManager.GetLogger("AuditLog"); auditLog.Info("Hello audit trail log!");

Un ejemplo.
Dada la configuración a continuación, donde el nivel de registro está Off , el registrador AuditLog seguirá registrando en el FileAppender configurado.
Cualquier otro registrador no lo hará, debido a la configuración de Off .

 <log4net> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="log-file.txt" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger %message%newline" /> </layout> </appender> <root> <level value="Off" /> <appender-ref ref="FileAppender" /> </root> </log4net>
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda