Użycie loggera oraz resourceBundles w programie javowym.

0

Witam. Użyłem w swoim programie logera i klasy ResourceBundles do lokalizacji. Chciałbym się jednak dowiedzieć czy moje rozwiązanie jest poprawne.

Mam aplikację, która składa się z wielu klas, w których loguję błędy. Chcę, żeby wszystko było zapisywane do jednego wspólnego pliku dla całej aplikacji. Napisałem więc taką klasę, ze statyczną zmienną:


public class AppLogger {

    public static final Logger LOGGER = Logger.getLogger("Client");

    static {
        try (OutputStream fos = new FileOutputStream(new File("log.txt"))) {
            Layout layout = new PatternLayout("[%p] %c - %m - Date: %d %n");
            FileAppender fileAppender = new FileAppender(layout, "log.txt");
            LOGGER.addAppender(fileAppender);
        } catch (IOException ex) {
            LOGGER.error("Error creating the file stream", ex);
        }
    }
} 

potem tej zmiennej używam w aplikacji poprzez statyczny import i odwołanie:

import static pl.client.logger.AppLogger.LOGGER;
LOGGER.error("Application error", e);

Czy takie podejście ze statyczną zmienną jest prawidłowe?

Podobnie postępuję z plikiem lokalizacyjnym. Mam klasę localization:

public class Localization {

    private static Locale LOCALE = Locale.getDefault();
    public static ResourceBundle RES_BUNDLE = ResourceBundle.getBundle(
            "pl.client.i18n.MyResources_pl_PL", LOCALE);
}

i używam zmiennej tego typu w różnych klasach analogicznie jak loggera:

import static pl.client.i18n.Localization.RES_BUNDLE;
RES_BUNDLE.getString("information");

Tutaj moje pytanie do bardziej doświadczonych osób czy takie podejście w obu przypadkach jest prawidłowe? Czy może stosuje się jakieś inne, lepsze rozwiązania?

0

Nikt nie jest w stanie pomóc, czy dobrze to wszystko zrobiłem?

1

Dlaczego tworzysz loggera programowo? Normalni ludzie tworzą XMLa z konfiguracją i taki np logback wcina go bez zbędnego kombinowania.

Statycznego stanu najlepiej unikać (no chyba, że to stałe zawarte w pełni w kodzie). Loggery można zostawić statyczne, ale już nad resource bundles bym się zastanowił, tzn czy nie użyć tutaj np wstrzykiwania zależności czy jakiegoś wzorca.

1

jak korzystasz z java 8 możesz sobie zrobić coś takiego:
https://www.opencredo.com/201[...]raits-java-8-default-methods/

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0