2011-09-06 13 views
18

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?

+2

Przykład kodu może pomóc w wyjaśnieniu pytania. – Peter

+0

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 –

+0

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

Odpowiedz

28

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.

4

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.

2

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.

Powiązane problemy