c# - debug - log4net levels
log4net solo funciona cuando se llama a XmlConfigurator.Configure() (2)
He enfrentado exactamente el mismo problema. Como señala correctamente, no debería necesitar llamar explícitamente a XmlConfigurator
cuando incluya la línea en su AssemblyInfo.cs
. El problema surge cuando el primer uso de log4net es en un lugar que no tiene esa línea. En mi caso, estaba usando el paquete Topshelf.Log4Net NuGet, y la primera línea de registro que mi aplicación registró fue a través de eso.
Simplemente puede registrar una línea al principio de su aplicación o si no necesita registrar nada, haga lo que hice y agregue lo siguiente en el punto de entrada de la aplicación
LogManager.GetLogger(typeof(Program));
Entiendo que this question has been asked asked times , pero desafortunadamente, no he podido hacer funcionar mi configuración de registro. Tengo que estar cometiendo un pequeño error en alguna parte.
Tengo una aplicación web .NET 4.5 MVC 4 / EF 5 y estoy tratando de hacer que el registro funcione. La solución tiene dos proyectos, uno para los objetos DAO y modelos, y otro para el sitio web. El archivo App.Config se ve así:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="RebuildingTogetherEntities" connectionString="stuff..."/>
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
<log4net configSource="Log.config" />
</configuration>
La misma sección de log4net también se ha copiado en el archivo Web.Config.
Agregué lo siguiente a ambos archivos AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log.config", Watch = true)]
"Copiar en el directorio de salida" se establece en verdadero para ambos archivos Log.Config.
La única forma en que parece que puedo lograr que el registro se agregue al archivo de salida es llamar a XmlConfigurator.Configure () antes de que se ejecute la primera declaración de registro. Supongo que puedo escribir una fachada para hacer eso cuando obtengo el registrador por primera vez, pero eso se siente mal.
¿Cómo puedo inicializar el registrador sin llamar al XmlConfigurator manualmente?
No es necesario que llame al XmlConfigurator manualmente si usa:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log.config", Watch = true)]
Sin embargo, debe agregar la etiqueta a todos sus archivos DLL (todos los archivos assambly.cs).