c# - logger - nlog tutorials
NLog no crea un archivo de registro (8)
Estoy intentando agregar el registro a una aplicación que se ejecuta en un dispositivo móvil con Windows Mobile 6.1. Framework .NET Compact Framework 3.5. utilizando NLog.
Tengo instalada la versión apropiada de la distribución NLog.
Sin embargo, no se están creando archivos de registro.
Aquí está mi archivo NLog.config
:
<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="logfile" xsi:type="File" fileName="./Neolant.ASRM.Terminal.log" layout="${longdate}|${level}|${message}|${exception}" autoFlush="true"/>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
</rules>
</nlog>
Y aquí está el código de prueba que estaba usando:
public static void Main()
{
try
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
var logger = NLog.LogManager.GetLogger("UpperLevel");
logger.Info("test test test.");
try
{
throw new Exception("Unexpected!");
}
catch (Exception e)
{
var logger = NLog.LogManager.GetLogger("UpperLevel");
logger.WarnException("An exception occured.", e);
}
throw new Exception("Suddenly!");
}
finally
{
NLog.LogManager.Flush();
}
}
private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs)
{
var logger = NLog.LogManager.GetLogger("UpperLevel");
logger.FatalException("Application closed due to exception.", unhandledExceptionEventArgs.ExceptionObject as Exception);
NLog.LogManager.Flush();
}
De la guía de solución de problemas de nlog:
github.com/NLog/NLog/wiki/Logging-troubleshooting
Si sabe que su archivo de configuración definitivamente se encuentra, reemplace temporalmente la sección de su archivo NLog.config con lo siguiente y pruébelo.
Esta regla coincidirá con cualquier registrador que haya creado, y si funciona, colocará un archivo log.txt en el ''directorio base'', que es el directorio ''bin'' para su instancia de prueba, por ejemplo, si está ejecutando una depuración En el modo, verás log.txt en tu bin> carpeta de depuración. (Esto no se explica muy claramente en la guía de solución de problemas).
Si esto funciona, entonces sabes que el problema está en tus reglas:
<nlog throwExceptions="true">
<targets>
<target name="file" type="File" fileName="${basedir}/log.txt" />
</targets>
<rules>
<logger name="*" minLevel="Trace" writeTo="file" />
</rules>
</nlog>
Encontré que solo name = "file" funcionó para el objetivo, otros valores no
La adición de throwExceptions = "true" como anteriormente también asegurará que recibas mensajes de error útiles cuando estés depurando.
El archivo de registro se estaba creando, pero no en el directorio de la aplicación.
El uso del renderizador de diseño ${basedir} como parte del nombre del archivo demostró ser una solución.
En caso de que la respuesta marcada como respuesta no sea tan clara, puede verificar el ejemplo
<targets>
<target xsi:type="Console" name="console"
layout="${longdate}|${level}|${message}" />
<target xsi:type="File" name="ErrorLog" fileName="${basedir}/error.txt"
layout="${longdate}
Trace: ${stacktrace}
${message}" />
<target xsi:type="File" name="AccessLog" fileName="${basedir}/access.txt"
layout="${shortdate} | ${message}" />
</targets>
Tomado desde aquí usando la ubicación de AppData en NLog
En mi caso, me he perdido las reglas después de definirlas, funciona como un encanto
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile" />
<!-- add your logging rules here -->
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
</rules>
También me enfrenté al mismo problema, finalmente lo he resuelto. Tenía una aplicación web, donde quiero implementar NLog. Por favor encuentre los siguientes pasos para implementar NLog.
Paso 1: - Vaya al administrador de paquetes de NuGet e instale los siguientes paquetes.
Paso 2: - Abre Web.config y agrega las siguientes líneas
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="D:/projects/NlogWeb/nlog-internal.log">
<targets>
<target name="console" xsi:type="ColoredConsole" layout="${message}" />
<!--Write logs to File-->
<target name="file" xsi:type="File" fileName="D:/projects/NlogWeb/ErrorLogFile.log" layout="--------------------- ${level}(${longdate})${machinename}-------------------- ${newline}
Exception Type:${exception:format=Type}${newline}
Exception Message:${exception:format=Message}${newline}
Stack Trace:${exception:format=Stack Trace}${newline}
Additional Info:${message}${newline}" >
</target>
</targets>
<rules>
<logger name="*" minlevel="trace" writeTo="file" />
</rules>
</nlog>
Paso 3: - Ahora la última configuración para llamar en su archivo .cs.
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace NlogWeb
{
public partial class Home : System.Web.UI.Page
{
private static Logger logger = LogManager.GetCurrentClassLogger();
protected void Page_Load(object sender, EventArgs e)
{
try
{
throw new Exception("Divide By Zero Exception", new DivideByZeroException());
}
catch (Exception ex)
{
logger.Error(ex.Message);
}
}
}
}
Hemos hecho. Ahora ejecuta tu código y disfruta el registro.
Tuve este problema que resultó que mi archivo de registro no se estaba copiando a mi directorio de compilación. La página de github NLog tenía la respuesta. (He reformateado un poco el párrafo para mejorar la legibilidad.) github.com/NLog/NLog/wiki/Logging-troubleshooting
NLog no puede encontrar el archivo de configuración. Esto puede suceder cuando el archivo NLog.config está configurado con Build Action = None o Copy to Output Directory = Do not copy en Visual Studio.
Establecer acción de compilación = Contenido y "Copiar en el directorio de salida = Copiar si es más nuevo para solucionar este problema)
de la guía de solución de problemas de nlog
Verifique las propiedades del archivo Nlog.config: Copiar al directorio de salida debe ser Copiar siempre
Por favor vea el enlace de la imagen https://i.stack.imgur.com/AlUG5.png
para resolver problemas simples, inicie VisualStudio para ejecutar como administrador. Esto ayudará a ordenar los permisos para crear archivos de registro mientras se realiza la depuración.
También use createDirs = true en cada una de las secciones de destino para crear automáticamente las carpetas faltantes en la ruta del archivo provista en la sección de destino.