Dostęp do klasy można uzyskać z wielu wątków. Czy rejestrator musi być w tym przypadku również ostateczny i statyczny? Dzięki.Czy rejestrator powinien zawsze być ostateczny i statyczny?
Odpowiedz
Wszystkie główne pakiety rejestrowania java (java.util.logging
, log4j
itd.) Są synchronizowane i bezpieczne dla wątków. Standardowy wzorzec rejestratora private final static
dla każdej klasy jest w porządku, nawet jeśli klasa jest wywoływana z wielu wątków.
Tak, program rejestrujący powinien być statyczny i ostateczny. Również najlepiej prywatny. Na każdą klasę musi być tylko jedna instancja rejestratora, a także jeśli nie chcesz dynamicznie zmieniać preferencji dziennika, lepiej jest ją ustawić jako ostateczną.
Rejestrator jest bezpieczny dla wątków i nie musisz się martwić gwintowaniem.
Uczynienie loggera jako ostatecznym i statycznym w żaden sposób nie wpłynie na bezpieczeństwo wątku użytkowania rejestratora. Jeśli instancja programu rejestrującego jest używana z wielu wątków, upewnij się, że używasz programu bezpiecznego dla wątków.
Ogólnie rzecz biorąc, rejestrator powinien być prywatny, statyczny, ale nie należy zakładać, że powoduje to jego bezpieczne działanie. Większość typowych ram logowania jest zabezpieczona wątkiem, więc jeśli używasz jednego z nich, powinieneś być dobry.
- 1. Rejestrator Singleton, rejestrator statyczny, rejestrator fabryczny ... jak się zalogować?
- 2. W języku C# powinien mój rejestrator Common.Logging być członkiem instancji lub statyczne?
- 3. C# Statyczny Rejestrator log4net tylko do odczytu, w jaki sposób można zmienić rejestrator w jednostce testowej?
- 4. Czy std :: atomic powinien być lotny?
- 5. Czy token APNS powinien być zaszyfrowany?
- 6. Gdzie powinien być startup.m?
- 7. Dlaczego operator usuwania musi być statyczny?
- 8. Dlaczego constexpr musi być statyczny?
- 9. Czy plik Perl's :: Glob zawsze powinien być filtrowany przez utf8 :: decode?
- 10. Czy test TDD zawsze powinien zakończyć się niepowodzeniem?
- 11. Czy RecyclerView.ViewHolder zawsze musi być wewnętrzną klasą?
- 12. Czy wydarzenia i strumienie CUDA zawsze powinny być niszczone?
- 13. Czy istnieje dobra praktyka, gdy typ powinien być zapakowany?
- 14. Czy NSUserDefault nie powinien być czystym polem do testów jednostkowych?
- 15. Czy plik Node.js powinien być używany do intensywnego przetwarzania?
- 16. Czy [table reloaddata] powinien być wywoływany tylko z głównego wątku?
- 17. Czy http powinien być używany do kolejnych stron https?
- 18. Czy powinien być jeden kontroler na widok w Angularjs?
- 19. Czy diff3 powinien być domyślnym stylem konfliktu w git?
- 20. Rejestrator xdotool
- 21. Czy znacznik główny Silverlight powinien być UserControl lub Canvas?
- 22. Czy findviewbyid powinien być wywoływany w wątku UI?
- 23. Jeśli ostateczny obiekt jest przekazywany, powinno być nadal zaznaczone zero?
- 24. Czy glob.glob (...) powinien być preferowany nad os.listdir (...) lub na odwrót?
- 25. Czy tag powinien być jego własnym zasobem lub zagnieżdżoną własnością?
- 26. Czy domyślnie import nie powinien być bezwzględny w python27?
- 27. DDD: Czy "kraj" powinien być obiektem wartościowym lub podmiotem?
- 28. Czy href powinien być ustawiony z prop() lub attr()?
- 29. Czy Git powinien być używany do przechowywania ciągłych kompilacji integracyjnych?
- 30. Android: Gdzie powinien być zdefiniowany/zarejestrowany OnSharedPreferenceChangeListener?
Przykład kodu może pomóc w wyjaśnieniu pytania. – Peter
Zobacz także ten post więcej dyskusji na temat tej najlepszej praktyki http://stackoverflow.com/questions/6653520/why-do-we-declare-loggers-static-final –
możesz pozbyć się tej zmiennej w ogóle, jeśli używasz [jcabi-log] (http://www.jcabi.com/jcabi-log/), static wrapper around slf4j – yegor256