Ya no tienes que buscar más por otras webs porque has llegado al sitio adecuado, contamos con la solución que buscas y sin liarte.
Solución:
Recomendaría log4net.
Necesitaría varios archivos de registro. Así que múltiples anexadores de archivos. Además, puede crear los anexadores de archivos dinámicamente.
Código de muestra:
using log4net;
using log4net.Appender;
using log4net.Layout;
using log4net.Repository.Hierarchy;
// Set the level for a named logger
public static void SetLevel(string loggerName, string levelName)
ILog log = LogManager.GetLogger(loggerName);
Logger l = (Logger)log.Logger;
l.Level = l.Hierarchy.LevelMap[levelName];
// Add an appender to a logger
public static void AddAppender(string loggerName, IAppender appender)
ILog log = LogManager.GetLogger(loggerName);
Logger l = (Logger)log.Logger;
l.AddAppender(appender);
// Create a new file appender
public static IAppender CreateFileAppender(string name, string fileName)
FileAppender appender = new
FileAppender();
appender.Name = name;
appender.File = fileName;
appender.AppendToFile = true;
PatternLayout layout = new PatternLayout();
layout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n";
layout.ActivateOptions();
appender.Layout = layout;
appender.ActivateOptions();
return appender;
// In order to set the level for a logger and add an appender reference you
// can then use the following calls:
SetLevel("Log4net.MainForm", "ALL");
AddAppender("Log4net.MainForm", CreateFileAppender("appenderName", "fileName.log"));
// repeat as desired
Fuentes/buenos enlaces:
Log4Net: Especifique mediante programación múltiples registradores (con múltiples agregadores de archivos)
Agregar appenders programáticamente
Cómo configurar log4net mediante programación desde cero (sin configuración)
Además, log4net también permite escribir en el registro de eventos. Todo está basado en la configuración, y la configuración también se puede cargar dinámicamente desde xml en tiempo de ejecución.
Edición 2:
Una forma de cambiar los archivos de registro sobre la marcha: el archivo de configuración de Log4Net admite variables de entorno:
Environment.SetEnvironmentVariable("log4netFileName", "MyApp.log");
y en la configuración de log4net:
No usaría bibliotecas de terceros, iniciaría sesión en un archivo xml.
Este es un ejemplo de código que inicia sesión en un archivo xml desde diferentes subprocesos:
private static readonly object Locker = new object();
private static XmlDocument _doc = new XmlDocument();
static void Main(string[] args)
if (File.Exists("logs.txt"))
_doc.Load("logs.txt");
else
var root = _doc.CreateElement("hosts");
_doc.AppendChild(root);
for (int i = 0; i < 100; i++)
new Thread(new ThreadStart(DoSomeWork)).Start();
static void DoSomeWork()
/*
* Here you will build log messages
*/
Log("192.168.1.15", "alive");
static void Log(string hostname, string state)
lock (Locker)
var el = (XmlElement)_doc.DocumentElement.AppendChild(_doc.CreateElement("host"));
el.SetAttribute("Hostname", hostname);
el.AppendChild(_doc.CreateElement("State")).InnerText = state;
_doc.Save("logs.txt");
¡Es posible que desee utilizar el registro de eventos! Aquí se explica cómo acceder desde C# http://support.microsoft.com/kb/307024/en
Pero cualquiera que sea el método que usará, recomendaría generar un archivo cada vez que se agregue algo al registro en lugar de cuando finalice su proceso, de modo que no perderá datos en caso de bloqueo o si su proceso es asesinado.
Reseñas y puntuaciones
Tienes la posibilidad difundir este post si te valió la pena.