Użycie loggera oraz resourceBundles w programie javowym.

Użycie loggera oraz resourceBundles w programie javowym.
O1
  • Rejestracja: dni
  • Ostatnio: dni
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ą:

Kopiuj

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:

Kopiuj
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:

Kopiuj
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:

Kopiuj
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?

O1
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
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.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1683
1

jak korzystasz z java 8 możesz sobie zrobić coś takiego:
https://www.opencredo.com/2015/01/30/traits-java-8-default-methods/

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.