Pracuję nad aplikacją wielowątkową o krytycznym znaczeniu dla wydajności. Przyjrzałem się rejestrowaniu rlog, Ace i Boost. Wybrałem rlog, ponieważ przeczytałem, że był najszybszy (gdy logowanie jest wyłączone, ma najmniejszy narzut).
Problem polega na tym, że pokazuje nazwę pliku, numer linii itp. Nawet w trybie wydania. Jeśli powiesz mi, jak wyłączyć te informacje, mój problem może zostać rozwiązany. W każdym razie, jaki jest najbardziej wydajny program rejestrujący w C ++ w mojej sytuacji?
Odpowiedzi:
Niestety w tej chwili nie mogę głosować przeciw. O ile mogę powiedzieć, nigdy nie używaj bzdur, takich jak Apache log4cxx. Zawiera poważne błędy.
Moim zdaniem powinieneś iść z dopalaczem.
źródło
Uważa się, że Pantheios jest najlepiej działającą biblioteką rejestrującą w C ++ , a także twierdzi, że jest jedyną w 100% bezpieczną dla typów (zobacz ten artykuł na temat powiązanej biblioteki wyjaśniającej, dlaczego biblioteki oparte na printf () / iostream nie są bezpieczny)
źródło
Odniosłem sukces z log4cxx pod adresem http://logging.apache.org/log4cxx/index.html . Jest to wersja popularnego loggera Log4j w języku C ++, którą można łatwo skonfigurować za pomocą pliku conf lub w kodzie. Narzut, gdy jest wyłączony, jest minimalny (wywołanie metody i porównanie liczb całkowitych).
Wzorzec danych wyjściowych do dziennika jest definiowany przez wzorzec konwersji, który może być tak prosty, jak data / godzina i komunikat. Obsługuje również ograniczenie rozmiaru pliku, najazd itp. Możesz także skonfigurować różne wzorce dla różnych błędów i źródeł.
źródło
Oto jak możesz wyłączyć dodatkowe informacje, które daje rlog (takie jak nazwa pliku, numer linii itp.). Kiedy inicjalizujesz rlog w swojej
main()
funkcji (lub gdziekolwiek), możesz wykonać następujące czynności:rlog::RLogInit(argc, argv); rlog::StdioNode slog (2, rlog::StdioNode::OutputColor); slog.subscribeTo( RLOG_CHANNEL("error") );
Drugi argument
StdioNode
dotyczy flag kontrolujących dane wyjściowe. Sprawdź dokumentację rlog (można ją wygenerować za pomocą Doxygen), aby uzyskać pełną listę możliwych flag. Ten w tym przykładzie sprawia, że rlog tylko koloruje dane wyjściowe według ważności, bez dodawania żadnych innych informacji.źródło
Możesz rozważyć system dziennika. logog oferuje dokładnie taką funkcjonalność, ale nie ma ukrytych zależności kodowych, które ma Pantheios. logog jest bezpieczny dla wątków i zapewnia wysoki stopień kontroli nad typami wiadomości, które są rejestrowane w dowolnym momencie.
Jestem autorem i opiekunem logoga, więc moja opinia jest nieco stronnicza. Ale przejrzałem rlog, Pantheios i inne systemy logowania przed wdrożeniem tego.
https://github.com/johnwbyrd/logog .
źródło
Niektóre z tych kosztów mogą wystąpić w Twoich makrach / strumieniach. Należy bardzo uważać, aby nie utworzyć ciągu rejestrowanego, gdy rejestrowanie jest wyłączone.
Sprytne wykorzystanie strumieni i operatora?: Pozwala to zrobić, podobnie jak makra.
źródło
Poco ma dobrą obsługę logowania ...
http://pocoproject.org/slides/110-Logging.pdf
źródło
może pantheios
chociaż nie wiem, czy jest bezpieczny dla wątków, czy nie ...
źródło
wypróbuj bibliotekę c-log, https://github.com/0xmalloc/c-log , szybką, stabilną i bezpieczną dla wątków bibliotekę dziennika dla języka C / C ++.
źródło
#include <pthread.h>
...)