log - Cuál es el mejor archivo de registro de rollover tracelistener para.NET
nlog net core (8)
Puede usar Microsoft.VisualBasic.Logging.FileLogTraceListener , que viene incorporado con .NET Framework. No deje que VisualBasic en el espacio de nombres lo asuste, solo tendrá que hacer referencia al ensamblado microsoft.visualbasic.dll y debería funcionar bien con C #.
Estoy buscando un buen TraceListener para .Net que soporte rodar sobre el archivo de registro en función de los límites de tamaño.
Restricciones
- Utiliza .Net integrado en el registro de seguimiento
- Clase o binario independiente que no es parte de una biblioteca gigante
- Permite rodar sobre un archivo de registro en función del tamaño
Estoy usando NLog y estoy muy satisfecho. El código fuente está bien escrito y es fácil de extender y modificar. La documentación es buena y es muy fácil de configurar.
Algunos enlaces:
He usado tanto Log4Net como Nlog. Prefiero NLog, pero en realidad una vez que están configurados te olvidas que están allí de todos modos (hasta que se rompa algo, ¡entonces te alegra que esté allí!). debe haber mucha documentación tanto en el interweb
Soy un gran admirador de log4net ( http://logging.apache.org/log4net/index.html ), es muy fácil de configurar y admite casi cualquier tipo de registro que desee, pero también puede tener escritos personalizados.
También puede hacer diferentes acciones dependiendo del nivel de registro. Registramos todos los mensajes en un archivo de texto y Error -> Fatal send emails
Considerar el Bloque de aplicaciones de Enterprise Library Logging
Asegúrese de instalar solo el bloque de registro, ya que el instalador EntLib verifica todos los bloques por defecto.
Como se indica en uno de los comentarios:
Clase FileLogTraceListener
Escribe en un archivo de texto continuo.
Observaciones
Se utiliza un archivo nuevo cuando se alcanza maxFileSize, así como una base diaria o semanal según lo especificado por logFileCreationSchedule.
Cada archivo tiene un nombre en el formato "/ (-) (-). Log", con la fecha local incluida para la rotación diaria y semanal, y un número de secuencia anexado si el archivo ya existe.
Guardo este fragmento de configuración a mano para cuando necesito hacer el rastreo de red. No es necesario tener un proyecto creado con referencia explícita a la DLL de VB agregada, ya que esto agrega la referencia en App.config en el tiempo de ejecución.
<system.diagnostics>
<sources>
<source name="System.Net">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Http">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
</sources>
<switches>
<add name="System.Net" value="Verbose"/>
<add name="System.Net.Http" value="Verbose"/>
<add name="System.Net.Sockets" value="Verbose"/>
</switches>
<sharedListeners>
<add name="System.Net"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
traceOutputOptions="DateTime,ProcessId,ThreadId"
customLocation="c:/temp"
location="Custom"
logFileCreationSchedule="Daily"
baseFileName="NetworkTrace"/>
</sharedListeners>
<trace autoflush="true"/>
</system.diagnostics>
Y agrega la referencia en tiempo de ejecución
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.VisualBasic" culture="neutral" publicKeyToken="b03f5f7f11d50a3a"/>
<codeBase version="10.0.0.0" href="file://C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.5/Microsoft.VisualBasic.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
FileLogTraceListener es una sugerencia común pero descarta eventos o arroja una excepción cuando el archivo excede el tamaño máximo especificado.
Creamos una clase que la amplía y anula los métodos Write / WriteLine.
Hay una try/catch (InvalidOperationException)
, y si eso sucede, llamamos a base. base.Close
y cambia el nombre del archivo ( FullLogFileName
) de la siguiente manera (necesitamos la base.Close
o de lo contrario obtendremos un error de ''archivo en uso''):
En un ciclo, agregamos un número hasta el final y vemos si ese archivo existe; si no, use File.Move(FullLogFileName, newFileWithNumber)
, de lo contrario, seguimos incrementando el número hasta que encontremos un nombre de archivo que funcione. También hay un bloqueo para garantizar que la instancia dada sea segura para subprocesos.