Hejka!

Pytanie z kategorii rookie, nawet bardzo.
Czy korzystanie z log4j do informowania usera o przebiegu programu to dobry pomysł?
Czy są na to jakieś inne, lepsze rozwiązania? Sysout brzmi średnio, przynajmniej tak mi się wydaje.

Przykładowo mam prostą grę command line (cokolwiek większego od guessing game) albo program do symulacji, gdzie mam zarówno output jak i input (znam obiekty odpowiadające zarówno za jedną i drugą czynność).
Jak to wszystko zebrać razem, tak aby miało ręce i nogi? Czego powinienem użyć w tym momencie (zewnętrzne biblioteki czy odpowiednio skonfigurowane klasy projektu) i jak podzielić klasy, aby oddzielić logikę od interakcji z użytkownikiem?

Z góry dzięki za odpowiedzi