log4net – Gli allegati non funzionano in IIS7.5

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

Inizialmente, ho ottenuto un’eccezione di sicurezza, quindi ho aggiunto requirePermission="false" e l’eccezione è andata via ma non è stato creato alcun file.

Il livello di attendibilità è pieno secondo IISM.

Non riesco a farlo funzionare sulla mia macchina, mi chiedo cosa succederà quando trasferirò su un ISP (discountASP).

Ecco la configurazione di log4net:

  

C #

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

Qualche indizio?

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

MODIFICARE:

Ho usato l’app web di prova che è stata eseguita in Cassini e l’ho eseguita in IIS7.5 e ha funzionato, quindi c’è qualcosa di specifico per la mia applicazione web che impedisce l’esecuzione di log4net. C’è molto da fare, ELMAH, cache di output, AJAX Control Toolkit, forms di autenticazione, ssl, riscrittura di URL, ecc. Oltre ad aggiungere ognuno di questi all’app di test, c’è un modo migliore per capire cosa sta causando log4net per funzionare?

AGGIORNARE:

Ho usato AdoNetAppender per stare lontano dai problemi di authorization dei file e sto ancora ottenendo lo stesso risultato. AdoNetAppender funziona per l’app di test in esecuzione su Cassini e IIS, ma non funziona sulla mia app Web. Ottenere la seguente eccezione:

System.Security.SecurityException: richiesta di authorization per tipo “System.Configuration.ConfigurationPermission, System.Configuration …” non riuscita.

AGGIORNAMENTO 2: mi sbagliavo sul fatto che il file di prova dell’appappAppApp funzionasse su IIS7.5. Questo è ciò che accade: il test webapp fileAppender e AdoDotNetAppender funzionano entrambi in Cassini / IIS dev, ma non in IIS7.5. Quindi penso che sia IIS il problema, non la mia webapp.

Nota. Sto facendo funzionare VS2008 come Admin, ma sono entrato in Windows 7 come nonAdmin. Inoltre, eseguo Windows 7 Home Premium, non Professional.

Ho concesso il SERVIZIO DI RETE piena authorization alla directory radice Web e ancora nessun file creato. Inoltre ha dato a TUTTO il permesso completo, nessun file.

Dal momento che adoDotNetAppender non ha funzionato neanche (ma l’ha fatto in IIS IIS), penso che ci possa essere un altro problema oltre ai permessi dei file.

AGGIORNAMENTO 3:

Ho avuto modo di lavorare per il FileAppender su IIS7. Se aggiungo questo:

  

e se l’utente è un amministratore, funziona. Se sono io, non un amministratore, non lo è. Quindi è un problema di permessi. Ma ho concesso a TUTTI i diritti sulla directory in cui il file è stato scritto prima e non ha funzionato, quindi c’è un’impostazione di authorization altrove. Inoltre, mentre FileAppender ora funziona con la rappresentazione, la penna di AdoNetAppender non si trova in IIS7. Ho provato ad aggiungere:

      

alla sezione AdoNetAppender, ma non riescono ancora a diventare silenzioso.

Ho aggiunto una taglia per chiunque possa aiutarmi a far funzionare AdoNetAppender con IIS7.5.

AGGIORNAMENTO 4:

Finalmente ho preso una traccia della traccia dello stack. Ecco qui:

 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 è riuscito a SQL Server. Inoltre, l’account di SQL Server dispone dei privilegi appropriati per l’inserimento. Inoltre, ho rimosso la sezione SecurityContext in quanto log4net non ha riconosciuto parte di esso.

È ansible abilitare il debug interno di log4net aggiungendo la chiave log4net.Internal.Debug al file di configurazione dell’applicazione.

    

Questo scriverà i messaggi di debug sulla console e sul sistema System.Diagnostics.Trace . È quindi ansible registrare questi messaggi in un file di testo aggiungendo un listener di traccia al file di configurazione. Assicurati che l’applicazione abbia il permesso di scrivere sul file.

        

In alternativa, i messaggi di traccia vengono scritti anche nel debugger di sistema, quindi è ansible utilizzare un’utilità come DebugView per acquisire i messaggi. Vedi le FAQ di log4Net per maggiori dettagli.

Finalmente ho funzionato, ho aggiunto

  

a system.web.

Con media, AdoNetAppender smette di funzionare, ma FileAppender funziona ancora per media e alta.

Utilizzare uno strumento come Process Monitor e spiare il processo IIS. Sospetto che stia cercando di creare il file di registro in una directory a cui l’account IIS non ha accesso.

A seguito di tale test, specificare un percorso assoluto per il file di registro a cui si conosce il processo IIS.

Sei entrato in Windows Explorer e verifica che gli utenti corretti (NETWORK SERVICE?) Abbiano i permessi di scrittura?

Ho avuto lo stesso problema. Ho risolto cambiando la configurazione di IIS 7. Piuttosto facile …

Vai alle impostazioni avanzate del pool di applicazioni e imposta “Carica profilo utente” su true! Quindi assicurarsi che IUSR (utente IIS) disponga dell’authorization per scrivere sul percorso dei registri.

Inoltre, di solito, aggiungo il supporto per le applicazioni a 32 bit, questo è utile quando si scaricano e si usano assembly da terze parti, in cui non si sa se sono stati rispettati per 32, 64 o indipendenti.

Ho trovato questo leggendo questo articolo: http://learn.iis.net/page.aspx/624/application-pool-identities/

Cordiali saluti, Tiago.

Provare a concedere l’authorization completa dell’utente IIS AppPool \ DefaultAppPool alla directory del registro. Questo mi ha aiutato almeno una volta.