c# - texto - Escribiendo logs a archivo
manejo de archivos en c# ejemplos (5)
¿Llamó al método de configuración cuando la aplicación se inicia por primera vez?
log4net.Config.XmlConfigurator.Configure();
En caso afirmativo. Debes ser bueno. Compruebe los permisos de archivo en el disco que está escribiendo.
Si lo desea, puede habilitar la depuración interna de log4net también para descubrir qué está mal.
http://logging.apache.org/log4net/release/faq.html#troubleshooting
Tengo algunos problemas al escribir registros de log4net en el archivo. Parece que hago todo como se describe en el manual, pero eso no funciona. Aquí está mi archivo logging.config:
<?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.
Aquí hay una guía paso a paso completa para agregar Log4Net a su proyecto, en Visual Studio 2012 y .NET 4.5.
Agregue una nueva aplicación de consola C # a su solución.
Seleccione
Tools >> Library Package Manager >> Manage NuGet Packages For Solution
y busquelog4net
. Instálelo y seleccione los proyectos que desea agregar las referencias log4net.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();
}
}
}
}
- Agregue
log4.config
, haga clic con el botón derecho y seleccioneProperties
luego seleccioneCopy 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>
- Edite
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>
Ejecute el programa y observe el archivo
log.txt
que se crea en el directorio output/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
En el futuro, si desea agregar
log4net
a otro proyecto, seleccioneTools >> Library Package Manager >> Manage NuGet Packages For Solution
seleccionelog4net
y haga clic enManage
luego marque los proyectos a los que desea agregarlog4net
.
Fantástico. Las respuestas son correctas ... excepto que no estaban trabajando para mí
Busqué en la red y finalmente descubrí que faltaba la siguiente línea en Assembly.cs:
[assembly: log4net.Config.XmlConfigurator]
Hay dos cosas que puedes hacer:
Una, si desea usar un archivo de configuración separado, agregando lo siguiente a su archivo app.config, este configurará el registro automáticamente.
<?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 el inicio de sesión al 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);
Parece que no tienes un elemento <root>
que haga referencia a tu 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>