2009-05-06 4 views
6

Possiedo un'applicazione che utilizza la libreria LDAP di Mozilla. Stiamo diagnosticando un problema relativo alla mancata connessione della libreria LDAP al server. Sto tentando di ottenere informazioni aggiuntive dalla libreria LDAP lanciando una versione debug della lib in uso con l'applicazione e abilitando il debug usando ldap_set_opt. Sfortunatamente, penso che la libreria di debug invii le stringhe di debug all'errore standard.Come acquisire l'output di errore standard da un servizio di Windows?

Mentre sto lavorando a ricompilare nuovamente la libreria client LDAP, si spera che abilitando l'opzione che lo fa chiamare OutputDebugString invece di eseguire lo streaming su stderr, una buona soluzione sarebbe quella di acquisire l'output stderr in un file. L'applicazione, tuttavia, è in esecuzione come servizio di Windows.

Qualcuno sa come reindirizzare lo stderr in un file per un'applicazione in esecuzione come servizio?

modificare

spero di non dover modificare più del codice sorgente di servizio rispetto ho già fatto. Le opzioni nella configurazione del servizio sarebbero l'ideale.

risposta

5

Puoi provare manualmente il reindirizzamento stderr?

FILE* stderr_redirect = freopen("C:/stderr.log", "w", stderr); 

    // Code that writes to stderr 

    fclose(stderr_redirect);

Edit:

Non v'è alcun modo per reindirizzare stdout o stderr per un servizio diverso per gestire i flussi all'interno del vostro servizio di te stesso. Alcuni servizi offrono un'opzione per reindirizzare questi messaggi su un file. Potresti reindirizzare temporaneamente questi flussi o aggiungere un'opzione al tuo servizio per renderlo configurabile la prossima volta che hai un problema.

+0

hmm ... beh, grazie per la conferma Naaff. Immagino che andrò al lavoro. – veefu

+0

Questo metodo ha funzionato per log4cxx che utilizza 'fputs' per' stderr' per il suo logger di debug interno. 'SetStdHandle' non ha funzionato. – bvj

5

Se si sta modificando il codice per il servizio, si potrebbe chiamare SetStdHandle nel ServiceMain:

SetStdHandle(STD_ERROR_HANDLE, logFileHandle); 
Problemi correlati