2009-05-06 14 views
6

Mam aplikację, która korzysta z biblioteki LDAP Mozilli. Diagnozujemy problem polegający na tym, że biblioteka LDAP nie nawiązuje połączenia z serwerem. Próbuję uzyskać dodatkowe informacje z biblioteki LDAP, podrzucając wersję debugowania lib w aplikacji i włączając debugowanie za pomocą ldap_set_opt. Niestety, myślę, że biblioteka debugowania wysyła ciągi debugowania do standardowego błędu.Jak przechwycić standardowe wyjście błędów z usługi Windows?

Podczas gdy pracuję nad ponowną kompilacją biblioteki klienta LDAP, mam nadzieję, że włączenie opcji, która sprawi, że wywołanie OutputDebugString zamiast strumieniowania do stderr, dobrym rozwiązaniem byłoby przechwycenie danych wyjściowych stderr do pliku. Aplikacja działa jednak jako usługa systemu Windows.

Ktoś wie, w jaki sposób mogę przekierować stderr do pliku dla aplikacji działającej jako usługa?

edit

Mam nadzieję, że nie trzeba modyfikować więcej kodu źródłowego usługa niż już mam. Opcje w konfiguracji usługi będą idealne.

Odpowiedz

5

można spróbować ręcznie przekierowywanie stderr?

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

    // Code that writes to stderr 

    fclose(stderr_redirect);

Edit:

Nie ma sposobu, aby przekierować stdout lub stderr dla usług innych niż te do obsługi strumieni wewnątrz usługi samodzielnie. Niektóre usługi zapewniają opcję przekierowania tych wiadomości do pliku. Możesz tymczasowo przekierować te strumienie lub dodać opcję do swojej usługi, aby umożliwić jej konfigurację następnym razem, gdy wystąpi problem.

+0

hmm ... cóż, dziękuję za potwierdzenie Naaff. Chyba zabiorę się do pracy. – veefu

+0

Ta metoda działała dla log4cxx, która używa 'fputs' do' stderr' dla swojego wewnętrznego rejestratora debugowania. "SetStdHandle" nie działa. – bvj

5

przypadku modyfikowania kodu do serwisu, można nazwać SetStdHandle w ServiceMain:

SetStdHandle(STD_ERROR_HANDLE, logFileHandle); 
Powiązane problemy