본문으로 바로가기

java swing gui에 textrea 에 로깅하기

category 카테고리 없음 2023. 7. 27. 17:35
반응형

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에서 표출할 수 있습니다.

 

반응형