2012-03-21 24 views
26

Tengo algunos problemas al escribir los registros de log4net en el archivo. Parece que hago todo lo descrito en el manual, pero eso no funciona. Aquí está mi archivo logging.config:Escribiendo registros en el archivo

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %message%newline" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 

Por favor ayuda con un ejemplo de archivo de configuración que realmente funciona.

+3

Apostaría que son varias ejemplos en Internet –

+1

¿Está configurando la configuración Xml ... http://logging.apache.org/log4net/release/sdk/log4net.Config.XmlConfigurator.Configure_overload_5.html – Lloyd

Respuesta

34

no parecen tener un elemento que hace referencia a su <root> appender:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

    <log4net> 
     <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="250KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
     </appender> 
     <root> 
     <level value="INFO" /> 
     <appender-ref ref="RollingFileAppender" /> 
     </root> 
    </log4net> 
</configuration> 
+3

Gracias, eso fue un punto. También descubrí que puede poner para redirigir todos los registros al archivo. –

17

¿Ha llamado al método de configuración cuando la aplicación se inicia por primera vez?

log4net.Config.XmlConfigurator.Configure(); 

En caso afirmativo. Deberías ser bueno. Verifique los permisos de archivos en el disco que está escribiendo.

Si lo desea, puede habilitar la depuración interna de log4net para descubrir cuál es el problema.

http://logging.apache.org/log4net/release/faq.html#troubleshooting

+0

también puede habilitar la depuración interna de log4net, como se detalla aquí: http://logging.apache.org/log4net/release/faq.html#troubleshooting – paul

+0

Para una aplicación web .NET, ¿solo se debe llamar esta línea una vez? es decir, en Application_Start() del archivo Global.asax? O en cada sesión de usuario, es decir, Session_Start()? – Seany84

+0

@paul: Agregué eso a mi respuesta. Gracias Paul – Shyju

6

hay dos cosas que usted puede hacer:

Uno, si desea utilizar un archivo de configuración independiente, añadiendo lo siguiente para que App.config archivo, se configura el registro de forma automática.

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Config" value="log4.config"/> 
     <add key="log4net.Config.Watch" value="True"/> 
     <add key="log4net.Internal.Debug" value="False"/> 
    </appSettings> 
</configuration> 

De lo contrario, debe iniciar sesión en el inicio de su aplicación.

//Initiate logging based on web.config file 
log4net.Config.XmlConfigurator.Configure(); 

// Create a logger for use in this class 
log4net.ILog log4 = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
69

Aquí es una guía completa paso a paso para añadir Log4net a su proyecto, en Visual Studio 2012 y .NET 4.5.

  1. Agregue una nueva aplicación de consola C# a su solución.

  2. Seleccione Tools >> Library Package Manager >> Manage NuGet Packages For Solution y busque log4net. Instálelo y seleccione a qué proyecto (s) desea agregar las referencias de log4net. enter image description here

  3. Editar Program.cs:

using System; 
namespace Log4Net 
{  
    class Program 
    { 
     private static readonly log4net.ILog log = log4net.LogManager.GetLogger 
       (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Writing to \"log.txt\" in the same directory as the .exe file.\n"); 
      log.Info("Info logging"); 
      try 
      { 
       throw new Exception("Exception!"); 
      } 
      catch (Exception e) 
      { 
       log.Error("This is my error", e); 
      } 
      Console.WriteLine("[any key to exit]"); 
      Console.ReadKey(); 
      } 
     } 
    } 
} 
  1. Añadir log4.config, haga clic derecho y seleccione a continuación, seleccione PropertiesCopy to Output Directory - Copy If Newer.
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

    <log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="250KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    </log4net> 
</configuration> 
  1. Editar App.Config para que coincida con lo siguiente:
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <appSettings> 
     <add key="log4net.Config" value="log4.config"/> 
     <add key="log4net.Config.Watch" value="True"/> 
     <add key="log4net.Internal.Debug" value="False"/> 
    </appSettings> 
</configuration> 
  1. Ejecutar el programa y observar el archivo log.txt que se creó en el directorio de salida \bin\Debug\:

    2013-08-10 11:54:26,798 [10] INFO Log4Net.Program [(null)] - Info logging 
    2013-08-10 11:54:26,824 [10] ERROR Log4Net.Program [(null)] - This is my error 
    System.Exception: Exception! 
        at Log4Net.Program.Main(String[] args) in C:\Test\Log4Net\Program.cs:line 14 
    
  2. En el futuro, si desea agregar log4net a otro proyecto, seleccione Tools >> Library Package Manager >> Manage NuGet Packages For Solution seleccione log4net y haga clic a continuación, marque las Manage proyectos que desea añadir a log4net. enter image description here

+0

Solo una nota sobre las secciones config: "Si este elemento está en un archivo de configuración, debe ser el primer elemento hijo del elemento ". https://msdn.microsoft.com/en-us/library/aa903350(v=vs.71).aspx – unicorn2

+0

¿Podría elaborar en el rol que juegan las configuraciones de App.config? – jxramos

+0

@jxramos La configuración en app.config controla todo lo que tiene que ver con el registro, incluyendo si escribe en un archivo, qué formato tiene cada línea, si escribe en la consola, etc. Probablemente sea más fácil ver los documentos de log4net para todos las opciones. – Contango

2

fantástico. Las respuestas son correctas ... excepto que no estaban trabajando para mí

buscado en la red y finalmente descubrieron que faltaba la siguiente línea en Assembly.cs:

[assembly: log4net.Config.XmlConfigurator] 
Cuestiones relacionadas