2010-04-27 41 views
6

No estoy seguro de si este es el foro correcto para publicar esta pregunta. Pero solo espero que alguien aquí haya usado log4net en el pasado, con la esperanza de obtener algo de ayuda.log4net logging no creando el archivo de registro

estoy usando log4net a registrar mis excepciones. Los valores de configuración se ven así:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
</configSections> 
<log4net debug="false"> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\Logs\sample.log" /> 
    <appendToFile value="true"/> 
    <rollingStyle value="Size"/> 
    <maxSizeRollBackups value="10"/> 
    <maximumFileSize value="10MB"/> 
    <staticLogFileName value="true"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%-5level %date %logger.%method[line %line] - %message%newline"/> 
    </layout> 
</appender> 
<root> 
    <level value="INFO"/> 
    <appender-ref ref="RollingLogFileAppender"/> 
</root> 
</log4net> 
</configuration> 

empecé a cabo mediante la adición de esta configuración de web.config, pero me dio un error (VS estudio no pudo encontrar un esquema para log4net- "No se pudo encontrar la información de esquema para la elemento log4net "). Así que seguí este enlace (Log4Net "Could not find schema information" messages) y configurado mi configuración en un archivo XML independiente, y añadió la siguiente línea de código en mi AssemblyInfo.cs:

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

Y en el código real, puse esta línea:

public void CreateUser(String username, String password) 
{ 
try 
{ 
    log.Info("Inside createuser"); 
    //code for creating user 
} 
catch(exception e) 
{ 
    log.Info("something happened in create user", e); 
} 
} 

El problema es que el archivo de registro no se está creando. No puedo ver nada dentro de C: \ Logs. ¿Alguien puede decirme qué estoy haciendo mal aquí?

Cualquier sugerencia/entradas serán muy útiles.

Gracias a todos de antemano.

Respuesta

1

Su archivo de registro no está siendo creado, probablemente debido a que el usuario ASPNET no tiene permiso para escribir en el directorio C:\Logs\. Asegúrese de otorgar todos los derechos a ASPNET a donde quiera que su aplicación desee crear el archivo de registro.

6

no pude conseguir la puesta en Asembly.cs a trabajar sin añadir esto a Application_Start en mi Global.asax:

log4net.Config.XmlConfigurator.Configure(); 
+0

esto requeriría la configuración para estar en app/web.config –

+0

No necesariamente. Ese método tiene varias sobrecargas que podrías usar. – jvilalta

+0

Veo, tuve la impresión de que sugirió usar la sobrecarga sin parámetros ... –

1

Así que va a cargar el archivo de configuración pero ¿estás configurando la variable de registro como por lo

private static readonly ILog log = LogManager.GetLogger(typeof(Program)); 
+0

Sí, estoy haciendo esto –

0

a menos que especifique una ruta completa para el archivo de configuración de log4net separada espera que el archivo esté en la ruta devuelta por:

System.AppDomain.CurrentDomain.BaseDirectory 

Si usted tiene una aplicación de consola simple, esto generalmente significa que el directorio que contiene el conjunto, pero esto no es necesariamente cierto en otros casos. Hay muchas maneras de resolver este problema (c.f. mi respuesta es here).

Para empezar, puede ser más fácil volver a poner la configuración de log4net en la aplicación/web.config e ignorar el esquema advertencia. Si el registro funciona, puede estar seguro de que no tiene problemas de permisos y puede pasar al siguiente paso para tener la configuración en un archivo externo.

¿Qué tipo de aplicación está escribiendo? Tal vez podría ser un poco más específico con mi respuesta ...

+0

Gracias por la respuesta. Estaba trabajando con un servicio. El problema se resuelve ahora.Aparentemente hubo un problema al configurar el servicio en sí. Una vez que se arregló, todo lo demás funcionó. –

Cuestiones relacionadas