2013-04-17 10 views
6

All'avvio del servizio Windows con le credenziali "NT AUTHORITY \ NETWORK SERVICE" si verifica uno strano problema con NLog: semplicemente non registra nulla sul file target se il nome file contiene punti.NLog non scrive in un file di destinazione con nome file containig punti

Io corro servizio di Windows sul mio WinServer 2008 R2 Standard con .NET Framework 3.5 SP1 funzione abilitata, NLog.config è la seguente:

<targets> 
    <target xsi:type="File" 
    name="f" 
    fileName="${basedir}/logs/${shortdate}.txt" 
    encoding="utf-8" 
    concurrentWrites="true" 
    keepFileOpen="false" 
    layout="${longdate} ${uppercase:${level}} ${message}"/> 
</targets> 
<rules> 
    <logger name="*" minlevel="Trace" writeTo="f" /> 
</rules> 

Dopo un po 'googling e la sperimentazione di configurazione sono arrivato fino a una soluzione alternativa non includendo l'estensione del file nel parametro fileName e ha funzionato bene, il che risolve il problema ma non sembra una soluzione decente.

E ciò che rende il problema più simile a una strana magia per me è il fatto che sono riuscito a risolvere il problema con l'estensione del file di registro in configurazione del mio secondo servizio Windows (che è in esecuzione sulla stessa macchina con lo stesso credenziali) semplicemente cambiando le informazioni di assemblaggio nelle opzioni del progetto.

Qualche idea?

risposta

13

Dopo aver abilitato il file di registro interno di NLog

<nlog 
    internalLogFile="c:\temp\nlogproblems.txt" 
    throwExceptions="true" 
    xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

sono riuscito a catturare UnathorizedAccessException

2013-04-17 11:06:14.0445 Error Exception in asynchronous handler 
    NLog.NLogRuntimeException: Exception occurred in NLog ---> 
    System.UnauthorizedAccessException: Access is denied. 
    (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

che ha portato a una conclusione che avrei dovuto fissare i permessi della cartella logs.

Finalmente nessuna magia più strana, ho solo dovuto consentire NETWORK SERVICE scrittura nella cartella logs.

0

nel mio caso era l'utente che esegue il pool di applicazioni.

sembra che con alcuni casi è necessario utenti specifici, il mio caso era in esecuzione un IHttpHandler e generò mehtods mi stava chiamando da ProcessRequest e per qualche motivo da ProcessRequest sé ha funzionato bene ma dalle submethods ho avuto la

Exception in asynchronous handler 
    NLog.NLogRuntimeException: Exception occurred in NLog ---> 
    System.UnauthorizedAccessException: Access is denied. 
    (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

e dopo aver letto 7kun risposta che ho dato a tutti il ​​pieno controllo e ha funzionato, e poi cambiato di trovare il vero utente mancante

+0

Ciao, Potete per favore dirmi come avete dato tutti il ​​pieno controllo? – tabby

+0

consulta questo tutorial, https://www.youtube.com/watch?v=ytmYVbMEsGg e invece di un tipo di utente specifico "Tutti" – bresleveloper