Cómo crear registros y extensiones simples con Log4net
Log4net es el próximo excelente componente de registro de código abierto. neto. Log4net es muy poderoso cuando se trata de iniciar sesión. Puede dividir registros en diferentes niveles y enviarlos a diferentes medios en diferentes formatos. Este artículo presenta principalmente cómo usar log4net para crear rápidamente registros del sistema en Visual Studio2008 y cómo extenderlo para generar campos personalizados.
2. Un ejemplo de uso simple
Paso uno: agregue una referencia a log4net.dll en el proyecto y la versión de referencia es 1.2.10.0.
Paso 2: Lea el archivo de configuración de log4net cuando se inicie el programa.
Si es un plan CS, agregue:
log4net. config. XML configurador. configure();
Si es un programa BS, agregue el siguiente contenido al método Application_Start en Global.asax.cs en el directorio raíz (no cree un nuevo programa):
log4net. config. XML configurador. configure();
Tanto los programas BS como CS pueden agregar directamente las siguientes declaraciones al archivo AssemblyInfo.cs del proyecto:
[Assembly: log4net. configuración. XmlConfigurator()]
También puede utilizar un archivo de configuración personalizado. Para obtener más información, consulte 4.4 Perfiles de asociación.
Paso 3: Modificar el archivo de configuración. Si es un programa CS, agregue contenido al archivo App.config predeterminado (no se requiere una nueva creación); si es un programa BS, se agregará al archivo Web.config. El contenido agregado es el mismo y se agregará. no figurar aquí.
Agregue el siguiente contenido al archivo App.config:
lt? versión xml = "1.0" codificación = "utf-8"? gt
lt configuración gt
ltconfigSections gt
ltsection name="log4net "
type="log4net.log 4 net configuraciónsectionhandler, log 4 net "/ gt;
lt/config secciones gt;
ltlog4net gt
ltroot gt
ltlevel value = " ADVERTENCIA "/ gt;
ltappender-ref ref = " logfile appender "/ gt;
ltappender-ref ref = " consola Pender "/ gt;
lt /root gt;
ltLogger name = "testApp.Logging" gt
ltlevel value = "DEBUG"/gt;
lt/logger gt ; p>
ltappender nombre = " logfile appender " tipo = " log 4 net.
Appender.FileAppender "
ltparam nombre = " Archivo " valor = " log-File "/ gt;
ltparam nombre = " AppendToFile " valor = " verdadero "/ gt. ;
ltlayout type="log4net. Layout.PatternLayout " >>p>
ltparam nombre = " Encabezado " valor = "[Encabezado]"/ gt;
ltparam nombre = " Pie de página " valor = "[Pie de página]"/ gt ;
ltparam nombre = " patrón de conversión " valor = " d[ t]-5p c[ x]- m n "/ gt
lt/layout gt;
ltfilter type="log4net. Filter.LevelRangeFilter " >>p>
ltparam nombre = " nivel mínimo " valor = " DEBUG "/ gt;
ltparam nombre = " nivel máximo " valor = " WARN "/ gt;
lt/filter gt;
lt/appender gt;
ltappender nombre = " consola appender " tipo = " log 4 net. Appender .ConsoleAppender "
ltlayout type="log4net. Layout.PatternLayout " >>p>
ltparam nombre = " patrón de conversión " valor = " d[ t]-5p c[ x]- m n "/ gt;
lt/layout gt;
lt/appender gt;
lt/log 4 net gt;
lt/configuration gt;
Paso 4: En uso en el programa.
log4net. ILog log = log4net. GetLogger("testApp.Log"); //Obtener información del registrador (fecha y hora. Now.ToString( ) ": Inicio de sesión exitoso"); Escriba un nuevo registro
De esta manera, la información se enviará a la consola y se escribirá en un archivo llamado "log-file.txt", donde la ruta del archivo "log -file.txt" es el directorio donde se ejecuta el programa actual también se puede definir como una ruta absoluta, configurada de la siguiente manera:
ltparam nombre = " Archivo " valor = " C:\ log-File . txt " / gt; escríbalo directamente en el archivo log-file.txt en el directorio raíz de la unidad c. Para técnicas de uso específicas, consulte 4.2.1
Consulte el archivo adjunto 8.6 para ver la implementación de este ejemplo.
3.Componentes principales de Log4net
3.1 Anexos
Los anexos se utilizan para definir el modo de salida del registro, es decir, el medio al que se envía el registro. debería estar escrito. El Log4net de uso común se ha implementado y se puede llamar directamente en el archivo de configuración. Consulte el ejemplo del archivo de configuración anterior. Por supuesto, también puede escribir uno usted mismo, que debe heredarse de log4net. Cirugía apendicular. Clase de marco de apéndice. El filtrado de registros y el formato de salida también se pueden implementar configurando filtros y diseños.
Los modos de salida que se han implementado son:
AdoNetAppender registra a la base de datos. Se pueden utilizar SQL y procedimientos almacenados.
AnsiColorTerminalAppender resalta los registros y los envía al terminal ANSI.
AspNetTraceAppender puede ver los registros grabados en modo de seguimiento en ASP.NET.
BufferingForwardingAppender almacena en caché los eventos de registro antes de enviarlos a Appenders secundarios.
ConsoleAppender genera registros en la consola de la aplicación.
EventLogAppender escribe registros en el registro de eventos de Windows.
FileAppender genera registros en un archivo.
ForwardingAppender envía eventos de registro a Appenders secundarios.
LocalSyslogAppender escribe registros en el servicio Syslog local (solo aplicable a entornos UNIX).
MemoryAppender guarda el registro en el búfer de memoria.
NetSendAppender envía registros al servicio Windows Messenger. Estos mensajes de registro se mostrarán en un cuadro de diálogo en el terminal de usuario.
OutputDebugStringAppender envía el registro al depurador o al depurador del sistema si el programa no tiene un depurador. Si el depurador del sistema tampoco está disponible, este mensaje se ignorará.
RemoteSyslogAppender escribe registros en el servicio de registro del sistema remoto a través del protocolo de red UDP.
RemotingAppender pasó. NET remoto.
RollingFileAppender escribe el registro en un archivo como un archivo de reversión.
SmtpAppender escribe registros en los correos electrónicos.
SmtpPickupDirAppender coloca los mensajes como archivos en un directorio donde los agentes SMTP como el agente SMTP de IIS pueden leerlos o enviarlos.
El cliente TelnetAppender acepta eventos de registro a través de Telnet.
TraceAppender escribe el registro. Sistema de seguimiento web.
UDPAppender envía registros al host remoto en forma de datagramas UDP sin conexión o transmite registros en forma de UdpClient.
3.2 Filtro
El filtro se puede utilizar para filtrar la salida de contenido de Appender. Los filtros suelen ser de los siguientes tipos:
DenyAllFilter evita que se registren todos los eventos de registro.
LevelMatchFilter solo registra eventos de registro del nivel especificado.
Registrar eventos con el nivel de registro LevelRangeFilter dentro del rango especificado.
LoggerMatchFilter solo se registrará si coincide con el nombre del registrador.
Los mensajes de PropertyFilter solo se registrarán si coinciden con el valor de propiedad especificado.
Los mensajes StringMathFilter solo se registrarán si coinciden con la cadena especificada.
3.3 Diseño
El diseño se utiliza para controlar el formato de salida de Appender, que puede ser lineal o XML.
Un Appender sólo puede tener un diseño.
El diseño más utilizado debería ser el clásico PatternLayout, seguido de SimpleLayout, RawTimeStampLayout y ExceptionLayout. Luego están IRawLayout, XMLLayout, etc., que se utilizan menos. El diseño lo puede implementar usted mismo y debe heredarlo de log4net. La clase LayoutSkeleton se utiliza para generar algunos formatos especiales y luego se puede volver a implementar un diseño cuando se amplía más adelante.
El formato de salida simple de SimpleLayout solo genera el nivel de registro y el contenido del mensaje.
RawTimeStampLayout se utiliza para formatear la hora, que se utilizará al enviar a la base de datos.
Estilos como "yyyy-MM-dd HH:mm:ss"
ExceptionLayout requiere que se pase un objeto de excepción como parámetro al método del registrador; de lo contrario, no se generará nada contenido. La salida contendrá mensajes y seguimientos.
PatterLayout es el diseño más utilizado y puede generar mucha información. Para conocer su uso, consulte el archivo de configuración en el ejemplo anterior. Consulte la nota 8.1 para conocer la cadena de formato de PatterLayout.
3.4 Logger
Logger es un componente que interactúa directamente con la aplicación. Logger solo genera registros, y luego el Appender al que hace referencia registra los registros en el medio especificado y el diseño controla el formato de salida.
Logger proporciona muchos métodos para registrar mensajes de registro y pueden existir varios registradores al mismo tiempo. Log4net mantiene cada par de objetos Logger instanciados como una entidad con nombre. Log4net utiliza un sistema de herencia, es decir, si hay dos registradores llamados a.b.c y a.b.. entonces a.b es el antepasado de a.b.c y cada registrador hereda las propiedades de su antepasado. Todos los registradores heredan de Root, que a su vez es un registrador.
Los niveles de registro de mayor a menor son:
OFF gtFatal gt Error gt Advertencia gtINFO gtDebug gt Todo
Cualquier valor superior al valor de configuración del nivel Métodos (consulte "Detalles del archivo de configuración" para saber cómo configurarlo) pueden escribir en el registro, y todos los métodos de escritura no escriben en el registro, y todos son lo contrario. Por ejemplo, cuando lo configuramos en Información, registrador. La depuración se ignorará y no se escribirá en el archivo, pero se escribirán errores fatales, advertencias, información e información porque son superiores a la información.
Al escribir registros, el nivel de registro generalmente se puede entender de la siguiente manera:
Error fatal (error fatal): registra errores en el sistema que hacen que el sistema no pueda continuar ejecutándose , como falla total del sistema disponible, falla del servicio, paradas, fallas del sistema, etc. Por ejemplo, la base de datos no se puede conectar y el sistema realiza un bucle infinito.
Errores (errores generales): registra errores que ocurren en el sistema, como inestabilidad del sistema, confusión de ciertas funciones o falla de ciertas funciones. Por ejemplo, el campo de datos está vacío, la operación de datos no se puede completar y la operación es anormal.
Advertencia: Registre información en el sistema que no afecta el funcionamiento continuo del sistema, pero no cumple con las condiciones operativas normales del sistema y puede causar errores en el sistema. Por ejemplo, el contenido del registro está vacío, el contenido de los datos es incorrecto, etc.
INFO (información general): registra la información básica que los usuarios deben saber cuando el sistema está en ejecución. Por ejemplo, el servicio ha comenzado a ejecutarse y la función se ha activado.
DEBUG (información de depuración): registra toda la información, el contenido o la salida de ciertos datos clave utilizados por el sistema para la depuración.
Logger implementa la interfaz ILog e ILog define cinco métodos (Debug, Inof, Warn, Error, Fatal) para registrar registros de diferentes niveles de registro. Cinco de estos cinco métodos están sobrecargados. Tome Debug como ejemplo para ilustrar, los demás son similares.
Los métodos de depuración en ILog se definen de la siguiente manera:
void Debug (mensaje de objeto);
void Debug (mensaje de objeto, excepción ex); p>
También hay un atributo booleano:
bool IsDebugEnabled { get}
Si usa depuración (mensaje de objeto, Exceptionex), independientemente de si la excepción está definida en el diseño, el registro se registrará de forma predeterminada. Se generará una excepción. Incluye mensajes de excepción y seguimiento. Si utiliza Depurar (mensaje de objeto), el registro no generará excepciones.
Finalmente, quiero hablar sobre una clase LogManager, que se utiliza para administrar todos los programas de registro. Su método estático GetLogger puede obtener el Logger correspondiente en el archivo de configuración:
log4net. Registro ILog = log4net. log manager. get logger(" logger-name ");
3.5 Representación de objetos
Le indicará al registrador cómo convertir un objeto en una cadena y registrarlo en el registro. (La interfaz definida en ILog recibe objetos, no cadenas).
Por ejemplo, si desea registrar objetos de Orange en el registro, pero en este momento, el registrador solo llamará al método ToString predeterminado de Orange. Por tanto, es necesario definir una clase OrangeRender para implementar la interfaz Log4Net. ObjectRender.iobjectRender y luego registrarlo (nuestra extensión en este artículo no utiliza este método, pero implementa directamente un diseño personalizado). En este momento el registrador sabe cómo registrar Naranja en el registro.
3.6 Repositorio
El repositorio se utiliza principalmente para mantener la estructura organizativa de los objetos de registro.