java 백엔드 개발자로서 voc등을 처리하다보면 반복되는 작업을 많이 하는 경우가 있습니다.
이때, swing 을 이용하여 간단한 윈도우 툴을 만들면 편한 경우가 많습니다.
text label, 버튼, 등 여러가지 컴포넌트를 이용하여 gui 툴을 만들게 됩니다.
대표적으로 java에서 기본으로 제공하는 javax.swing 등을 이용하여 만들 수 있습니다.
JFrame, JTextArea, JButton, JTextField, JTextField[], JLabel, JTabbedPane 등을 이용하여 만들었을 때,
무엇보다 필요한 기능은 바로 로깅처리입니다.
이 경우 JTextArea를 이용하여 textarea 에 로그를 표출 할 수 있습니다.
아래와 같은 방법이 있습니다.
먼저, gui 클래스에 'javax.swing.JTextArea' 인스턴스를 생성합니다.
JTextArea textArea = new JTextArea();
로깅을 하고자 하는 클래스의 생성자에 JTextArea를 매개변수로 전달하고, 이를 클래스 변수로 저장합니다.
public class MyClass{
private JTextArea textArea;
public MyClass(JTextArea textArea){
if(textArea == null){
throw new IllegalArgumentException("JTextArea 인스턴스가 null입니다.");
}
logger = LoggerUtil.setupLoggerWithAppender(MyClass.class, textArea);
}
public static void make(String input, Connection con){
if(con !=null){
logger.info("db connection success");
}else{
logger.info("db connection failed");
}
}
}
이와 같은 방식으로 생성자의 logger에 LoggerUtil.setupLoggerWithAppender(클래스명, textArea)를 주입하여
textArea에 로깅을 할 수 있습니다.
마찬가지로 이 클래스에서 다른 클래스의 인스턴스를 생성하여 또 다른 클래스의 로깅을 같은 공간에 출력하고자 한다면, 아래와 같이 할 수 있습니다.
public class MyClass{
private JTextArea textArea;
public MyClass(JTextArea textArea){
if(textArea == null){
throw new IllegalArgumentException("JTextArea 인스턴스가 null입니다.");
}
bInstance = new App(textArea);
cInstance = new App_new(textArea);
logger = LoggerUtil.setupLoggerWithAppender(MyClass.class, textArea);
}
public static void make(String input, Connection con){
if(con !=null){
logger.info("db connection success");
}else{
logger.info("db connection failed");
}
}
}
위 와 같이 생성자 안에 새로운 클래스의 인스턴스를 생성하여 textArea를 전달하고, 해당하는 클래스의 생성자에 마찬가지로 지정해주면 됩니다.
public class App{
private static Logger logger;
public App(JTextArea textArea){
if(textArea == null){
throw new IllegalArgumentException("JTextArea 인스턴스가 null입니다.");
}
logger = LoggerUtil.setupLoggerWithAppender(App.class, textArea);
}
...
.....
}
이렇게 하면 모든 logging 을 textArea에서 표출할 수 있습니다.