2012-05-11 14 views
14

Estoy intentando agregar el registro a la aplicación que se ejecuta en un dispositivo móvil con Windows Mobile 6.1. .NET Compact framework 3.5. usando NLog.NLog no crea el archivo de registro

Tengo la versión apropiada de distribución NLog instalada.

Sin embargo, no se crean 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> 

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(); 
} 
+1

¿Ha experimentado con diferentes nombres de archivo/caminos? E.g 'fileName =" Neolant.ASRM.Terminal.log "' without '. \\'? ¿El Nlog.Config está en el directorio de la aplicación? Además, puede activar el [registro interno de Nlog] (http://nlog-project.org/wiki/Logging_is_not_working_-_how_to_troubleshoot_it%3F) para obtener información adicional sobre su problema. – nemesv

+0

He intentado el nombre del archivo con y sin '. \' Con resultados similares (es decir, sin). NLog.config se implementa en el directorio de la aplicación. Intentaremos el registro interno ahora. – Srv19

+0

Siguiendo el enlace que proporcionó, me encontré con la solución. Muchas gracias. – Srv19

Respuesta

17

Se estaba creando el archivo de registro, pero no en el directorio de la aplicación.

Usando ${basedir} el renderizador de diseño como parte del nombre del archivo resultó ser una solución.

+0

Su enlace no funciona .. . Por favor, arréglenlo. –

+2

Gracias. Arreglado. – Srv19

+0

Hmm extraño. Esto lo arregló para mí, pero tengo otra aplicación donde no tiene que especificarse (y la salida aún funciona) – Jowen

11

En caso de que la respuesta marcada como respuesta no es del todo clara, puede comprobar 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 de aquí using AppData location in NLog

7

he tenido este problema resultó que mi archivo de registro no se está copiando a mi directorio de compilación. La página NLog github tenía la respuesta. (He reformateado el párrafo un poco para una mejor legibilidad.) https://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 in Visual Studio.

Conjunto Acción de generación = Contenido y "Guardar en agenda de salida = Copiar si es más reciente para solucionar este problema)

+0

Gracias. La configuración "No copiar" fue el problema. – joshmcode

0

En la guía de solución de problemas Nlog:

https://github.com/NLog/NLog/wiki/Logging-troubleshooting

Si sabe que su archivo de configuración es 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, pondrá un log.tx t archivo en el 'directorio base' - que es el directorio 'bin' para su instancia de prueba p. si está ejecutando en modo de depuración, verá log.txt en su bin> carpeta de depuración. (Esto no se explica muy claramente en la guía de solución de problemas).

Si esto funciona, entonces sabemos que el problema es con sus reglas:

<nlog throwExceptions="true"> 
    <targets> 
    <target name="file" type="File" fileName="${basedir}/log.txt" /> 
    </targets> 
    <rules> 
    <logger name="*" minLevel="Trace" writeTo="file" /> 
    </rules> 
</nlog> 

he encontrado que sólo name = "archivo" trabajó para el objetivo - otros valores no lo hicieron

Agregar throwExceptions = "true" como se indicó anteriormente también asegurará que reciba mensajes de error útiles cuando esté depurando.

0

En mi caso, me he perdido las reglas después de definir las reglas 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> 
Cuestiones relacionadas