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/2015/01/30/traits-java-8-default-methods/

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