5

Tengo una serie de aplicaciones ASP.NET que usan log4net sin problemas. No he podido obtener log4net para registrar nada en ninguno de los servicios que escribí utilizando las bibliotecas MVC. Tengo la configuración idéntica (aparte del nombre del archivo de registro) en todos los servicios. Cada servicio se ejecuta como el mismo usuario y utiliza el mismo grupo de aplicaciones.La aplicación no se registra

Aquí es la configuración que estoy usando:

<log4net> 
     <appender name="XMLAppender" type="log4net.Appender.RollingFileAppender"> 
      <file value="C:\logs\SERVICENAME.Log.xml"/> 
      <appendToFile value="true"/> 
      <rollingStyle value="Composite"/> 
      <datePattern value="yyyyMM"/> 
      <maxSizeRollBackups value="10"/> 
      <maximumFileSize value="100MB"/> 
      <layout type="log4net.Layout.XmlLayoutSchemaLog4j"> 
       <locationInfo value="false"/> 
      </layout> 
    </appender> 
     <root> 
      <level value="INFO"/> 
      <appender-ref ref="XMLAppender"/> 
     </root> 
    </log4net> 

tengo la entrada configSection en todo, de la siguiente manera:

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
... 
</configSections> 

También he activado la depuración log4net y establecer system.diagnostics a escribe el rastro en un archivo. Aquí es donde veo una diferencia en la salida entre las aplicaciones MVC y las que no son MVC.

MVC:

log4net: log4net assembly [log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821]. Loaded from [C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\MVCSERVICENAME\25c1b478\883641ac\assembly\dl3\707a9005\e1887c7f_5040ca01\log4net.DLL]. (.NET Runtime [2.0.50727.3074] on Microsoft Windows NT 6.0.6002 Service Pack 2, v.286) 
log4net: DefaultRepositorySelector: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy] 
log4net: DefaultRepositorySelector: Creating repository for assembly [MVCSERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] 
log4net: DefaultRepositorySelector: Assembly [MVCSERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\MVCSERVICENAME\25c1b478\883641ac\assembly\dl3\13a19b30\fdb642f4_937dca01\MVCSERVICENAME.DLL] 
log4net: DefaultRepositorySelector: Assembly [MVCSERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified. 
log4net: DefaultRepositorySelector: Assembly [MVCSERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy] 
log4net: DefaultRepositorySelector: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy] 
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository] 

no MVC (Trabajo):

log4net log4net assembly [log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821]. Loaded from [C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\SERVICENAME\33034378\c825df91\assembly\dl3\fe97001a\e1887c7f_5040ca01\log4net.DLL]. (.NET Runtime [2.0.50727.3074] on Microsoft Windows NT 6.0.6002 Service Pack 2, v.286) 
log4net DefaultRepositorySelector: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy] 
log4net DefaultRepositorySelector: Creating repository for assembly [SERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] 
log4net DefaultRepositorySelector: Assembly [SERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\SERVICENAME\33034378\c825df91\assembly\dl3\827ed068\1a38e2eb_fc7cca01\SERVICENAME.DLL] 
log4net DefaultRepositorySelector: Assembly [SERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified. 
log4net DefaultRepositorySelector: Assembly [SERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy] 
log4net DefaultRepositorySelector: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy] 
log4net XmlConfigurator: configuring repository [log4net-default-repository] using .config file section 
log4net XmlConfigurator: Application config file is [C:\content\SERVICENAME\web.config] 
log4net XmlConfigurator: Configuring Repository [log4net-default-repository] 
log4net XmlHierarchyConfigurator: Configuration update mode [Merge]. 
log4net XmlHierarchyConfigurator: Logger [root] Level string is [INFO]. 
log4net XmlHierarchyConfigurator: Logger [root] level set to [name="INFO",value=40000]. 
log4net XmlHierarchyConfigurator: Loading Appender [XMLAppender] type: [log4net.Appender.RollingFileAppender] 
log4net XmlHierarchyConfigurator: Setting Property [File] to String value [C:\Windows\Temp\SERVICENAME.Log.xml] 
log4net XmlHierarchyConfigurator: Setting Property [AppendToFile] to Boolean value [True] 
log4net XmlHierarchyConfigurator: Setting Property [RollingStyle] to RollingMode value [Composite] 
log4net XmlHierarchyConfigurator: Setting Property [DatePattern] to String value [yyyyMM] 
log4net XmlHierarchyConfigurator: Setting Property [MaxSizeRollBackups] to Int32 value [10] 
log4net XmlHierarchyConfigurator: Setting Property [MaximumFileSize] to String value [100MB] 
log4net XmlHierarchyConfigurator: Setting Property [LocationInfo] to Boolean value [False] 
log4net XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.XmlLayoutSchemaLog4j] 
log4net RollingFileAppender: Type = [0], r0 = [197001], r1 = [197001] 
log4net RollingFileAppender: Type = [1], r0 = [197001], r1 = [197001] 
log4net RollingFileAppender: Type = [2], r0 = [197001], r1 = [197001] 
log4net RollingFileAppender: Type = [3], r0 = [197001], r1 = [197001] 
log4net RollingFileAppender: Type = [4], r0 = [197001], r1 = [197001] 
log4net RollingFileAppender: Type = [5], r0 = [197001], r1 = [197002] 
log4net RollingFileAppender: Searched for existing files in [C:\Windows\Temp] 
log4net RollingFileAppender: curSizeRollBackups starts at [0] 
log4net RollingFileAppender: [200912] vs. [200912] 
log4net FileAppender: Opening file for writing [C:\Windows\Temp\SERVICENAME.Log.xml] append [True] 
log4net XmlHierarchyConfigurator: Created Appender [XMLAppender] 
log4net XmlHierarchyConfigurator: Adding appender named [XMLAppender] to logger [root]. 
log4net XmlHierarchyConfigurator: Hierarchy Threshold [] 
log4net DefaultRepositorySelector: Creating repository for assembly [SERVICENAME.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] 
log4net DefaultRepositorySelector: Assembly [SERVICENAME.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\SERVICENAME\33034378\c825df91\assembly\dl3\d74dc9d5\8aa6a7e8_fc7cca01\SERVICENAME.Core.DLL] 
log4net DefaultRepositorySelector: Assembly [SERVICENAME.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified. 
log4net DefaultRepositorySelector: Assembly [SERVICENAME.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy] 
log4net DefaultRepositorySelector: repository [log4net-default-repository] already exists, using repository type [log4net.Repository.Hierarchy.Hierarchy] 

En ambos casos estoy creando el objeto iLOG de la siguiente manera:

sólo lectura estática registro privado ILOG = LogManager .GetLogger (typeof (CLASSNAME));

¿Hay algo que me falta o algún cambio que deba hacer para que esto funcione en MVC? En este punto, también estaría dispuesto a cambiar a otra solución de registro si se sabe que funciona correctamente con MVC.

Gracias Tim

+0

¿su proceso de trabajo tiene acceso de escritura a c: \ logs? –

+0

Sí. Por lo que vale, acabo de probar NLog y funcionó a la perfección. Debería haber renunciado a log4net hace un tiempo. –

Respuesta

0

Uso Nlog. Parece que funciona. Tuve que poner el archivo NLog.config en el directorio base (junto con el web.config) y funcionó bien. Pude escribir en el directorio correcto, lo que me demuestra que los permisos del directorio se configuraron correctamente. Tomó alrededor de 5 minutos comenzar a terminar para realizar los cambios.

Sería bueno saber por qué log4net se negó a jugar.

+1

O echa un vistazo a ELMAH http://code.google.com/p/elmah/ – David

+0

Lo investigaré. Gracias David. –

+2

ELMAH es realmente agradable, pero no reemplaza a log4net, lo complementa. ELMAH es un gran recurso para registrar excepciones no controladas, por ejemplo, cosas que por alguna razón pasan desapercibidas a través de tus llamadas a lo4net (por ejemplo, un desarrollador olvidó agregar un try/catch o registrar la excepción) –

10

Sé que este post es bastante viejo, pero yo estaba recibiendo este tema (repositorio de log4net predeterminado) en un proyecto WCF también. Estaba usando el archivo web.config con una sección log4net (no un archivo separado log4net.config).

para moverse por la cuestión puse lo siguiente en mis AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)] 

Lo mismo es cierto también si se utiliza un archivo de configuración externa sin embargo. HTH, Ciaran

+0

Gracias - Tenía exactamente el mismo problema y esto lo resolvió – Justin

+0

Estaba usando el código en app_statup, usando esto en su lugar resolvió el problema. – Clint

0

En mi caso, fue debido a las propiedades del proyecto se establecieron para dar salida a bin \ debug pero el DLL log4net requiere que el archivo log4net.config existe en la carpeta BIN. Cambié las propiedades del proyecto para que salieran a la carpeta bin y luego el archivo log4net.config se copió en el momento correcto en el lugar correcto.

0

Además, asegurarse de que "copy local" esté configurado para el archivo de configuración de log4net también evitará muchos problemas.

+0

Esto probablemente debería ser un comentario, no una respuesta completa ... – IronMan84

4

Mi aplicación web es ASP.NET MVC uno con un archivo log4net.config separado en la raíz web.

Después de mucho googlear y tirones de pelo recurrí a inicializar log4net través de código en Application_Start (en Global.asax):

protected void Application_Start() 
{ 
    var logConfigFilePath = Server.MapPath("~/log4net.config"); 

    log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(logConfigFilePath)); 
} 

Esto resolvió el problema para mí y log4net empieza a registrar correctamente.

+0

Nota, puede poner la configuración de log4net en 'Web.config'. El uso de 'Server.MapPath (" ~/Web.config ");' parece apuntar el XmlConfigurator al archivo. –

Cuestiones relacionadas