2008-10-20 7 views
10

Estoy buscando las mejores prácticas para integrar log4net a SharePoint para solicitud web, activación de funciones y todo lo del temporizador.SharePoint y Log4Net

Tengo varios subproyectos en mi granja, y me gustaría tener solo un archivo Log4Net.config.

[Editar]
No sólo necesito configurar log4net para la aplicación web, que es fácil de hacer (yo uso Global.asax, y un archivo log4net.config, para que pueda modificar la configuración del registro withtout recarga la aplicación de web), pero también tienen que registrar los eventos asíncronos:

  • de manejo de evento (como ItemAdded)
  • Trabajos del temporizador
  • ...
+0

¿Ha pensado en iniciar sesión en los registros de SharePoint? – Nat

+0

Sí. Pero quiero poder tener diferentes archivos de registro para cada proyecto, o tener una base de datos central para registros con una simple aplicación web para ver esos registros sin tener que dar acceso a los registros ULS. – Nico

Respuesta

0

Puede liberar el archivo de configuración como parte de los paquetes de solución en la sección 12 (use STSDev) para crear cualquier paquete). Esto le daría una ubicación establecida para la configuración y cualquier cambio que se realice en ella se puede liberar de forma controlada (es decir, no es necesario editar manualmente, simplemente retrotrae y vuelva a instalar la solución).

1

En primer lugar, deberá modificar el archivo web.config donde reside su directorio virtual de SharePoint. Esto se debe a que necesitará agregar entradas SafeControl para confiar en el ensamblaje log4net. Puede actualizar el programa web.config programáticamente utilizando la clase SPWebConfigModification en un receptor de funciones. Como tiene que modificar web.config de todos modos, puede considerar incluir su configuración log4net dentro y no configurar una configuración log4net externa.

Sin embargo, si usted todavía desea hacer esto, puede funcionar si se añade lo siguiente al archivo web.config:

<configuration ...> 
    ... 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 
    </configSections> 
    <log4net configSource="log4Net.config"> 
    ... 
</configuration> 

El archivo log4net.config continuación, debería ser capaz de vivir junto su web.config Como dice Nat, podría implementar este archivo como un paquete de solución.

Suponiendo que intenta ejecutar una confianza mínima, deberá actualizar su archivo de seguridad de acceso de código para incluir también los ensamblados de log4net. Todo su código personalizado de SharePoint debería usar automáticamente su configuración de log4net.

+0

gracias, pero esto solo me ayuda para la parte "web" de SharePoint. Sin embargo, también necesito registrar todo lo que ocurre de forma asíncrona, como controlador de eventos, función, trabajos, etc. ... – Nico

9

Implementé esto recientemente y se me ocurrió una solución que funcionó para mí.

Despliegue su archivo de configuración de log4net a 12 colmenas y log4net dll en el GAC utilizando una solución de alcance global. Luego, en el código de su aplicación, inicialice de manera explícita log4net desde la ubicación de su archivo global. Esto le permite registrar el receptor de funciones, trabajos de temporizador y código de aplicación web.

[assembly: log4net.Config.XmlConfigurator(ConfigFile = 
    @"C:\Program Files\Common Files\Microsoft Shared\" + 
    @"Web Server Extensions\12\CONFIG\log4net.config", Watch = true)] 

ver aquí http://www.codeproject.com/KB/sharepoint/SharepointLog4Net.aspx

+1

downvoted b/c su enlace no va realmente a codeproject.com – Chloraphil

+0

@Chloraphil ops link is – TheCodeKing

+3

solo un menor Mejora: recomendaría usar SPUtility.GetGenericSetupPath (@ "CONFIG \ log4net.config") para obtener la ruta de SharePoint. En este caso, no importará si SharePoint está en la unidad C o no. –

0

he desarrollado una característica log4net y empaquetado en un archivo WSP. El receptor de características agrega un httpmodule al web.config y el httpmodule carga el log4net.config desde el direcory de diseños cuando el evento de inicio de la aplicación se genera en el módulo http.