Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

154
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda