¿Cómo (programáticamente, sin configuración xml) configura múltiples registradores con Log4Net? Los necesito para escribir en diferentes archivos.Log4Net: especifique mediante programación múltiples registradores (con múltiples appendidores de archivos)
31
A
Respuesta
39
This thread at the log4net Dashboard details an approach.
Para resumir un poco, es de esperar sin necesidad de digitalizar fuera demasiado código:
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
3
using System;
using Com.Foo;
using System.Collections.Generic;
using System.Text;
using log4net.Config;
using log4net;
using log4net.Appender;
using log4net.Layout;
using log4net.Repository.Hierarchy;
public class MyApp
{
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);
}
// Add an appender to a logger
public static void AddAppender2(ILog log, 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 [%logger] - %m%n";
layout.ActivateOptions();
appender.Layout = layout;
appender.ActivateOptions();
return appender;
}
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));
static void Main(string[] args)
{
BasicConfigurator.Configure();
SetLevel("Log4net.MainForm", "ALL");
AddAppender2(log, CreateFileAppender("appenderName", "fileName.log"));
log.Info("Entering application.");
Console.WriteLine("starting.........");
log.Info("Entering application.");
Bar bar = new Bar();
bar.DoIt();
Console.WriteLine("starting.........");
log.Error("Exiting application.");
Console.WriteLine("starting.........");
}
}
namespace Com.Foo
{
public class Bar
{
private static readonly ILog log = LogManager.GetLogger(typeof(Bar));
public void DoIt()
{
log.Debug("Did it again!");
}
}
}
+0
este funciona bien, por lo menos se requiere log4jNet dll version2.0. –
1
Espero que esta ayuda, se configura un simple registrador de la consola.
static void Main(string[] args)
{
const string logLayoutPattern =
"[%date %timestamp][%level] %message %newline" +
"Domain: %appdomain, User: %username %identity %newline" +
"%stacktracedetail{10} %newline" +
"%exception %newline";
var wrapperLogger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
var logger = (Logger) wrapperLogger.Logger;
logger.Hierarchy.Root.Level = Level.All;
var consoleAppender = new ConsoleAppender
{
Name = "ConsoleAppender",
Layout = new PatternLayout(logLayoutPattern)
};
logger.Hierarchy.Root.AddAppender(consoleAppender);
logger.Hierarchy.Configured = true;
wrapperLogger.Debug("Hello");
Console.ReadKey();
}
Cuestiones relacionadas
- 1. log4net - configurar usando múltiples archivos de configuración
- 2. Log4net: Múltiples madereros
- 3. log4net registro centralizado para múltiples componentes
- 4. Especifique múltiples subdominios con control de acceso Origen
- 5. estrategia de log4net en los registradores con nombre?
- 6. ¿Cambiar el nivel de registro mediante programación en log4net?
- 7. Compila múltiples archivos C con make
- 8. Múltiples archivos adjuntos con Swiftmailer
- 9. NSPredicar endswith archivos múltiples
- 10. Búsqueda de múltiples cadenas en múltiples archivos
- 11. ¿Cómo se manejan múltiples archivos web.config para múltiples entornos?
- 12. hilos log4net + + rodando múltiples appender archivo
- 13. Inspeccionar mediante programación archivos .class
- 14. Múltiples archivos de configuración con Python ConfigParser
- 15. Múltiples archivos de registro con log4j
- 16. Carga de archivos múltiples con jQuery
- 17. Cargas múltiples de archivos con cURL
- 18. Carga de archivos múltiples con ASP.NET MVC y jQuery Complemento de carga de archivos múltiples
- 19. archivos en procesos múltiples
- 20. Requerir archivos múltiples
- 21. Múltiples archivos pom.xml maven
- 22. Log4j archivos múltiples
- 23. Múltiples archivos App.Config
- 24. cHaga SOURCE_GROUP archivos múltiples?
- 25. Cargar múltiples archivos FTP
- 26. FindFirstFile Múltiples tipos de archivos
- 27. gVim y lenguajes de programación múltiples
- 28. ¿Comprimir múltiples archivos JavaScript con YUIcompressor?
- 29. Crear Nuget paquete con múltiples archivos DLL
- 30. JFileChooser - ¿filtros de archivos múltiples?
que he tomado este enfoque para una de mis montajes, en lugar de utilizar el enfoque de configuración XML. Mientras se genera el archivo, por alguna razón, los métodos relacionados con el registro ILog no escriben nada en los archivos. ¿Hay algún método para llamar para que el nuevo apilador tenga efecto? No he encontrado nada como esto, aún ... – Dave
@Dave: tuve el mismo problema y lo resolví agregando 'l.Repository.Configured = true;' a 'AddAppender'. – Stephan
@Stephan gracias, creo que eso es exactamente lo que tuve que hacer para que funcione también. :) – Dave