Czy Log4j zostaje porzucony na rzecz Slf4j? [zamknięte]

Wygląda na to, że log4j ma pewne problemy z ładowaniem klas (między innymi) i wydaje mi się, że trend jest taki, aby przejść z log4j w kierunku slf4j. (Hibernate przestał używać pierwszego na rzecz drugiego)

    Czy to prawda?
  1. Jakie są główne problemy w log4j, które rozwiązuje slf4j?
  2. czy slf4j jest ostatnim słowem, czy jest jeszcze lepszy standard branżowy "The next next log4j"?

Update:

  • więc to odpowiedź przez delfuego dezorientuje mnie, czy możesz to zaakceptować / sprzeciwić?:

Wydaje się, że natknąłeś się na poważny problem z log4j (i Apache Commons Logging library), mianowicie, że mają śmiesznie trudny czas odkrywania i interakcji z odpowiednimi klasami, ponieważ są jest używany. Jest bardzo gęsta Wyjaśnienie wraz z przykładami, tutaj; wiadomość jest taka, że jedną z głównych sił napędowych dla nowy framework do logowania SLF4J miał całkowicie wyeliminuj te problemy. ty może chcesz go wymienić i sprawdzić, czy twoje życie staje się łatwiejsze.

Author: ROMANIA_engineer, 2010-01-14

6 answers

Slf4j jest rzeczywiście tylko logging fasady. Jednak Log4j ma zostać zastąpiony przez Logback , od tych samych autorów.

Update: Jeśli chcesz wiedzieć o innej korzyści Slf4j, jest to fakt, że następujące (brzydkie) konstrukcje nie są już potrzebne, aby uniknąć toString() niepotrzebnie został wywołany:

if (logger.isDebugEnabled()) {
    logger.debug("Message: " + bigObject + ", " + anotherBigObject);
}

Możesz zamiast tego użyć sparametryzowanych wiadomości:

logger.debug("Message: {}, {}", bigObject, anotherBigObject);

Zobacz także jaki jest najszybszy sposób (nie) logowania?

 46
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-20 21:48:59

Slf4J nie jest alternatywą dla Log4j, ale raczej zapewnia fasadę do logowania, więc można podłączyć własny framework logowania. Jest to przydatne głównie dla bibliotek. od slf4j.org:

Prosty Logging dla Javy lub (SLF4J) służy jako prosta fasada lub abstrakcja dla różnych logowań frameworków, np. java.util.logowanie, log4j i logback, pozwalając na zakończenie użytkownika do podłączenia żądanego logowania ramy w czasie wdrażania.

Do odpowiedzi twoje pytanie: Slf4j jest teraz adoptowany przez frameworki, ale w twoich projektach możesz nadal używać Log4J (lub innych)

 18
Author: EJB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-14 12:13:48

Po pierwsze: ważny punkt: Slf4j to logowanie frontend( API), które można wykorzystać poniżej większości głównych systemów logowania: log4j lub java.util.na przykład logowanie. Lepiej więc porównać sfl4j do commons-logging .

O stanie Log4j, cytaty z o stanie logowania Javy (rok temu)

Nie zdawałem sobie sprawy, że rozwój log4j jest zasadniczo martwy. Obecnie jest w wersji 1.2, a plany wersji 1.3 były porzucony na rzecz rozwoju log4j 2.0. Jednak nie wydaje się, aby 2.0 był w aktywnym rozwoju. Warto zauważyć, że Ceki Gülcü, pierwotny założyciel projektu log4j, przeniósł się do slf4j(patrz poniżej).

 7
Author: Kartoch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-30 21:31:11

Patrząc na stronę slf4j nie wygląda to tak, jakby zastąpiła log4j - pozwoli to na użycie tej samej podstawowej struktury logowania (np.

Wygląda bardziej jak zamiennik Apache Commons Logging niż log4j.

 6
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-14 12:07:13

SLF4J ma, moim zdaniem, ogromną zaletę, że można ujednolicić rejestrowanie wszystkich bibliotek, których używasz, poprzez mosty, które zapewnia. Żadna z innych frameworków logowania na to nie pozwala. Pozwala to projektom płynnie przenosić się do SLF4J i ignorować wybory RAM logowania, które wprowadziły zależności.

 3
Author: Thomas Lötzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-14 12:08:10

Slf4j nie jest prawdziwym logiem. Slf4j nie obsługuje wielu funkcji swoich implementatorów. Krótko mówiąc, wymieniam poniżej przykłady log4j.

  • Slf4j nie może określić wybranego przez Użytkownika pliku konfiguracyjnego, ale wymusza użycie domyślnego (log4j. properties lub log4j.xml) na jednym z wielu korzeni Javy (każdy jar ma jeden root plus JVM root i klasy lub bin). Jeśli mają go dwa pliki JAR, trudno jest kontrolować, który z nich bezpiecznie używać.
  • Slf4j nie może obsługiwać wszystkich poziomów Log4j, takich jak "fatal" Podczas przełączania dużego kodu z Log4j na Slf4j potrzebna jest duża zmiana kodu(np. decyzja o zmianie poziomów).
  • Two key jar files (log4j-over-slf4j.jar lub slf4j-log4j12.słoik) należy wybrać. Jeśli classpath obie, nie będzie działać. Jeśli wybierzesz jedną losowo, utracisz nieoczekiwane funkcje (np. log4j-over-slf4j.jar nie obsługuje wielu plików dziennika dla tych samych klas; np. jeden dla dziennika zdarzeń i jeden dla dziennika surowych danych).
 3
Author: Steven S Wang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-08 16:20:05