2009-08-22 12 views
9

Estoy usando VS2005, un proyecto de sitio web, un proyecto de implementación web y Log4Net. Puedo usar el registro cuando estoy desarrollando localmente. Puedo ver los archivos de registro y todo está bien. Cuando construyo mi sitio web, (utilizando el proyecto de implementación web), utilizo el despliegue como una sola opción DLL. Cuando compruebo las ubicaciones donde deberían estar mis archivos de registro, no puedo ver ningún archivo.¿Por qué Log4Net no está creando archivos de registro en producción?

¿Hay alguna manera de solucionar este problema? No creo que agregar el valor de depuración a la configuración de la aplicación sea útil porque no tengo una consola porque es un sitio web.

EDIT No quiero que las 150 repeticiones se desperdicien una última vez. Comparé la traza interna de mi entorno de desarrollo con la traza de la producción. El seguimiento de mi entorno de desarrollo muestra la llamada al Configurador Xml, donde el de producción no. Tengo un código en el método global.asax en application_start(). Puse código de depuración allí y se llama en dev pero no en producción.

Creo que es aquí donde el proyecto de implementación web está causando algunos problemas. ¿Global.asax se compila en una sola DLL? Cuando hago una compilación en el directorio de implementación, veo un archivo global.compile. ¿Debe ir esto a la carpeta bin en producción? ¿O es el código global.asax en la única DLL? Tener ambos en la carpeta bin o solo en el DLL no cambió nada.

Respuesta

3

he encontrado el problema. Los permisos fueron CORRECTOS. Resulta que el uso de un proyecto de implementación web también crea un archivo precompliled.config en la raíz. No había copiado eso a la cultura de la producción. Tan pronto como estuvo en eso, todo funcionó. Lo siento, nadie recibió la recompensa.

1

Esto me ha pasado antes y tenía permisos en el usuario de ASPNET para crear los archivos necesarios. ¿Se puede verificar si hay algo en el registro de eventos de Windows que indique esto?

Para verificar el tipo de cosas (observamos al observador!) Sacamos donde el log4net iba a funcionar escribiéndolo usando el OutputDebugString() via pinvoke.. También lo colocamos en un try catch para asegurarnos de que descubrimos errores con respecto a esto, ya que es muy importante usarlo para poder iniciar sesión correctamente.

7

¿El proceso de trabajo tiene suficientes privilegios para escribir en el directorio de registro? Supongo que ese no es el caso. Es posible que desee otorgarle al grupo de procesos de trabajo derechos para escribir en el directorio y ver si eso soluciona su problema.

+0

Qué grupos deben Puedo dar permisos de escritura a. Pensé que era el servicio de red? – uriDium

+3

Creo que hay un grupo local, IIS_WPG, que usaría. Por lo general, todas las cuentas que ejecutan procesos de trabajo deben incluirse en este grupo. Usar el grupo lo protege en caso de que decida cambiar la cuenta por algún otro motivo. Además, si su directorio de registro está en el sitio web, asegúrese de configurar cierta protección para que las personas no puedan hacer solicitudes en su contra. – tvanfosson

+0

Gracias por el consejo. ¿Hay algún lugar donde podamos leer sobre esto? Soy realmente nuevo en seguridad y permisos. – uriDium

0

Compruebe los permisos en el directorio de salida esperado y asegúrese de que el servicio web pueda escribir en él. La forma más sencilla de hacerlo es ejecutar filemon.exe (una aplicación SysInternals) y restringirlo en consecuencia. Esto debería indicarle si algo falla y puede corregirlo según sea necesario

+0

He ejecutado FileMon y filtrado para * log. El único archivo que apareció fue el archivo de depuración interna de Log4Net. No intentó abrir escribir nada en los archivos de registro deseados. – uriDium

0

Asegúrese de que log4net get esté configurado correctamente. ¿Tal vez el dll está bien pero falta el archivo de configuración? log4net podría estar allí, pero simplemente no tiene ningún apéndice activo.

0

para asegurarse de que si log4net está configurado correctamente, sí creo un Appender UDP que se conecta al puerto 9090. Utilizo la motosierra http://logging.apache.org/chainsaw/index.html para verificar las entradas del registro.

con esto usted puede verificar que al menos se hayan realizado algunas entradas de registros y que el registrador se esté ejecutando.

UDP Config Appender de

<appender name="UdpAppender" type="log4net.Appender.UdpAppender"> 
     <remoteAddress value="localhost" /> 
     <remotePort value="9090" /> 
     <layout type="log4net.Layout.XmlLayoutSchemaLog4j"> 
      <locationInfo value="true" /> 
     </layout> 
</appender> 

motosierra XML

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">  
    <plugin name="LocalReceiver" class="org.apache.log4j.net.UDPReceiver"> 
     <param name="Port" value="9090" /> 
    </plugin>  
</log4j:configuration> 
+0

He intentado esto. Un par de cosas que me confunden. No tengo un archivo de configuración log4j. Estoy usando Log4net. ¿Esto todavía funciona? A continuación, utilicé mi archivo de configuración web para mantener mi configuración (funciona en dev). Abrí el puerto 9090 pero Chainsaw parece escuchar en los puertos 4445 y 4560. ¿Debería poner lo anterior en un archivo en alguna parte y volver a intentarlo? – uriDium

+0

Además, una última cosa, veo que apuntas el complemento a una clase apache. ¿Debo descargar esas clases también o están incluidas en el webstart? – uriDium

+0

simplemente guarde el segundo archivo XML como archivo y tan pronto como inicie la motosierra, puede abrir un archivo de configuración -> si no se le pide que elija un archivo de configuración, debe borrar el directorio ".chainsaw" en su directorio de usuario . no necesita una configuración de log4j, solo use su web.config -> pero agregue este appender como se configuró anteriormente – nWorx

2

Parece que la raíz de su problema es que el evento Application_Start en Global.asax no se está disparando.

Existe un problema "conocido" al implementar desde VS 2005 a Windows 2003, que el Application_Start no se inicia.

El contenido de Global.asax.cs se compilará en la dll. Pero el Application_Start no se ejecutará a menos que el archivo Global.asax esté presente.

Aquí hay un par de enlaces de interés:

http://accidentaltechnologist.com/asp-net/application_start-not-firing-and-the-globalasax/

http://www.velocityreviews.com/forums/t300292-web-deployment-projects-globalasax-problem.html

Hay algunas otras posibilidades que están cubiertos en los enlaces anteriores.

Esperanza esto ayuda

Shiraz

4

Añadir esta en el archivo AssemblyInfo.cs y comprobar

[assembly: log4net.Config.XmlConfigurator(Watch=true)] 
Cuestiones relacionadas