log4net – Appender non funziona in IIS7.5

Sono in grado di scrivere un file di registro utilizzando log4net e Cassini/IIS dev server, ma quando uso IIS7.5, non riesco a scrivere su un file.

Inizialmente, ho avuto un’eccezione di sicurezza, così ho aggiunto requirePermission="false" e l’eccezione è andato via, ma nessun file è stato creato.

Il livello di fiducia è pieno secondo IISM.

Io non riesco a ottenere questo lavoro sulla mia macchina, mi chiedo cosa succederà quando il trasferimento di un provider di servizi internet (discountASP).

Ecco il log4net di installazione:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"  />
</configSections>

<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="log-file.txt" />
        <appendToFile value="true" />
        <encoding value="utf-8" />
        <layout type="log4net.Layout.SimpleLayout" />
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
    </root>
</log4net>

C#

log4net.Config.XmlConfigurator.Configure();
ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Log.Info("This is a test");

Eventuali indizi?

ASP.NET 3.5, 2008, Windows 7, IIS7.5, log4net 1.2.10

EDIT:

Ho usato il test di web app che correva in Cassini e corse in IIS7.5 e ha funzionato così c’è qualcosa di specifico per la mia applicazione web che impedisce log4net da corsa. C’è
un sacco succedendo, ELMAH, la cache di output, AJAX Control Toolkit, forme di autenticazione ssl, la riscrittura dell’url, ecc… Altro che aggiungere ognuno di questi per l’applicazione di prova, c’è un modo migliore per capire che cosa sta causando log4net di lavoro?

AGGIORNAMENTO:

Ho usato il AdoNetAppender di stare lontano dal file di problemi di permessi e sto ancora ricevendo lo stesso risultato. Il AdoNetAppender opere per il test di app in esecuzione su Cassini e IIS, ma non funziona sul mio web app. Ottenendo il seguente eccezione:

Sistema.Di sicurezza.SecurityException: Richiesta di autorizzazione di tipo ‘System.Di configurazione.ConfigurationPermission, Sistema.Configurazione di…’ non riuscita.

AGGIORNA 2:
Mi ero sbagliato, che la prova webapp fileAppender lavorato in IIS7.5. Questo è ciò che accade: Il test webapp fileAppender e AdoDotNetAppender sia il lavoro in Cassini/IIS dev, ma non in IIS7.5. Quindi penso che sia IIS che è il problema, non la mia webapp.

Nota. Io sono in esecuzione VS2008 come Admin, ma sono entrato in Windows 7 come nonAdmin. Inoltre, io sono in esecuzione Windows 7 Home Premium, non Professionale.

Ho concesso SERVIZIO di RETE completo di autorizzazione per la cartella radice del web e ancora non c’è nessun file creato. Inoltre, ha dato a TUTTI l’autorizzazione completa, non c’è nessun file.

Dal adoDotNetAppender non funzionare (ma non in dev IIS), penso che ci potrebbe essere un altro problema oltre che per le autorizzazioni del file.

AGGIORNA 3:

Ho preso a lavorare per la FileAppender su IIS7. Se posso aggiungere questo:

<identity impersonate="true"
    userName="zzz"
    password="yyy" />

e se l’utente è un amministratore, funziona. Se si tratta di me, non sono un admin, non è così. Quindi è un problema di autorizzazioni. Ma l’ho fatto a concedere TUTTI i diritti per la directory del file è scritto prima e non ha funzionato, quindi non c’è un’impostazione di autorizzazione altrove. Inoltre, mentre il FileAppender ora funziona con la rappresentazione, la AdoNetAppender stil non in IIS7. Ho cercato di aggiungere:

<securityContext type="log4net.Util.WindowsSecurityContext">
    <userName value="zzz" />
    <password value="yyy" />
    <domain value="aaa" />
</securityContext>

per il AdoNetAppender sezione, ma ancora ottenere silenzioso esito negativo.

Ho aggiunto una taglia per chi mi può aiutare a ottenere il AdoNetAppender di lavoro con IIS7.5.

AGGIORNA 4:

Ho finalmente preso il controllo della traccia dello stack. Ecco:

log4net:ERROR [AdoNetAppender] Failed in DoAppend
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
       at log4net.Util.LogicalThreadContextProperties.GetProperties(Boolean create)
       at log4net.Core.LoggingEvent.CreateCompositeProperties()
       at log4net.Core.LoggingEvent.CacheProperties()
       at log4net.Core.LoggingEvent.FixVolatileData(FixFlags flags)
       at log4net.Core.LoggingEvent.set_Fix(FixFlags value)
       at log4net.Appender.BufferingAppenderSkeleton.Append(LoggingEvent loggingEvent)
       at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent)
The action that failed was:
LinkDemand
The type of the first permission that failed was:
System.Security.Permissions.SecurityPermission
The Zone of the assembly that failed was:
MyComputer

Ho avuto il SQL Profiler e nulla di fatto per SQL Server. Inoltre, l’account di SQL Server ha i privilegi necessari per eseguire il comando insert. Inoltre, ho rimosso il SecurityContext sezione log4net non riconoscere una parte di esso.

  • Hai provato a elevare il Livello di Fiducia della vostra applicazione? Puoi postare l’intero stack trace?
InformationsquelleAutor Steve | 2010-06-25



6 Replies
  1. 41

    È possibile attivare log4net di debug interno aggiungendo la chiave log4net.Internal.Debug per il tuo file di configurazione dell’applicazione.

    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>

    Questo permetterà di scrivere messaggi di debug per la console e il Sistema.Diagnostica.Traccia sistema. Quindi, è possibile accedere a questi messaggi in un file di testo con l’aggiunta di un trace listener è il file di configurazione. Assicurarsi che l’applicazione ha permesso di scrivere il file.

    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add 
                    name="textWriterTraceListener" 
                    type="System.Diagnostics.TextWriterTraceListener" 
                    initializeData="C:\tmp\log4net.txt" />
            </listeners>
        </trace>
    </system.diagnostics>

    In alternativa, tenere traccia dei messaggi sono scritti anche il debugger di sistema, in modo che è possibile utilizzare un programma di utilità come DebugView per catturare i messaggi. Vedere la log4Net FAQ per ulteriori dettagli.

    • Ho fatto sopra e funziona solo in Cassini/IIS Dev. Durante l’esecuzione da IIS7, il file di registro non è ancora creata. Ho elaborato il mio aggiornamento.
    • Hai visto questo post stackoverflow.com/questions/2205757/…
    • Si tratta di un problema di autorizzazioni penso – vedere il mio aggiornamento.
  2. 2

    Utilizzo di uno strumento come il Processo di Monitorare e spiare il processo di IIS. Ho il sospetto che si sta cercando di creare il file di log in una directory di IIS account non ha accesso.

    Che prova, specificare un percorso assoluto di un file di registro che si conosce il processo di IIS ha accesso.

    • Io ho cercato in che. Un po ‘ oscuro su chi possiede il processo. Non NETWORKSERVICE e ancora cercando di capire a chi appartiene il AppPoolIdentity processo. Ho fatto dare a TUTTI l’accesso alla directory di registro, però, che non ha funzionato. Il download di systernals e autorizzazioni di IIS.
    • Hai strumentato il codice abbastanza per vedere dove si cade? Utilizzare il OutputDebugStringAppender e DebugView con (Cattura -> Global Win32 segno di spunta). Questo dovrebbe essere il più indolore metodo di registro per aiutare problemi a sparare il problema principale.
    • Io non riesco a trovare un file di scrivere la richiesta nel Processo di Monitor per w3wp.exe. Secondo il monitor di processo, l’utente è IIS APPPOOL\DefaultAppPool. Ho aggiunto ulteriori dettagli in un nuovo aggiornamento. Cercando in DebugView ora.
    • Ho aggiunto il OutputDebugStringAppender, corse DebugView (come admin), ed è spuntata globale e aperto il web pg, ma nulla è esposto DebugView.
  3. 2

    Hai vai in esplora risorse di windows e verificare il corretto gli utenti (SERVIZIO di RETE ?) avere i permessi di scrittura?

    • Sì, ho dato tutto al SERVIZIO di RETE e a TUTTI e ancora nessun file creato.
  4. 2

    Ho avuto questo stesso problema. Ho risolto modificando la configurazione di IIS 7. Piuttosto facile…

    Andare per il pool di applicazioni di impostazioni e impostare la “Caricare il Profilo Utente di” vero! Quindi assicurarsi che IUSR (utente IIS) hai il permesso di scrivere il percorso del log.

    Inoltre, di solito, è possibile aggiungere il supporto per le applicazioni a 32 bit, questo è utile quando si scaricare e utilizzare assembly da 3 ° parti, dove non si sa se sono stati rispettati per 32, 64 o indipendente.

    Ho trovato questo con la lettura di questo articolo: http://learn.iis.net/page.aspx/624/application-pool-identities/

    I migliori saluti,
    Tiago.

  5. 0

    Provare a dare IIS AppPool\DefaultAppPool utente l’autorizzazione a pieno la directory di log. Che mi ha aiutato almeno una volta.

Lascia un commento