[Java] Logging


ロギングとは?


  • システムの実行レコードにエラーが発生した場合は、デバッグ時に使用するために記録できます.

  • プログラミング時にログ・ファイルに記録されたコードを追加して、必要な情報がログに保持されるようにします.

  • ログを使用して、システムエラーをデバッグ、追跡し、パフォーマンスと問題を向上させます.

  • ログの保持が少なすぎると、正しいシステム状況を特定することが難しくなります.逆に、ログの保持が多すぎると、頻繁なファイルI/Oオーバーヘッドとログファイルのバックアップの問題が発生します.だからできるだけ彼を残さなければならない.
  • java.util.logging


  • java.util.ログ・レコードはjavaがデフォルトで提供するログ・パッケージで、ファイルまたはコンソール・ログにコンテンツを出力できます.

  • ログにはレベルがあり、ログパッケージが提供するログレベルはsevere、warning、info、config、fine、finer、finestです.

  • jre/lib/logging.propertiesファイルを編集することで、ログの出力ログレベルを変更できます.

    上のjre/lib/logging.propertiesファイルのjava.util.logging.ConsoleHandler.出力ログレベルは、levelの値を変更することで変更できます.
  • 👨🏻‍💻 Example Code


    MyLogger.java
    package ch11;
    
    import java.io.IOException;
    import java.util.logging.FileHandler;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import java.util.logging.SimpleFormatter;
    
    public class MyLogger {
    	
    	Logger logger = Logger.getLogger("mylogger");
    	private static MyLogger instance = new MyLogger();
    	
    	public static final String errorLog = "log.txt";
    	public static final String warningLog = "warning.txt";
    	public static final String fineLog = "fine.txt";
    	
    	private FileHandler logFile = null;
    	private FileHandler warningFile = null;
    	private FileHandler fineFile = null;
    
    	private MyLogger(){
    	
    			try {
    				logFile = new FileHandler(errorLog, true); //true를 하면 뒤에 이어서 log를 찍는다.
    				warningFile = new FileHandler(warningLog, true);
    				fineFile = new FileHandler(fineLog, true);
    				
    			} catch (SecurityException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    	
    			logFile.setFormatter(new SimpleFormatter());
    			warningFile.setFormatter(new SimpleFormatter());
    			fineFile.setFormatter(new SimpleFormatter());
    			
    			logger.setLevel(Level.ALL); // 모든 level을 다 찍겠다.
    			fineFile.setLevel(Level.FINE); // fine level부터 찍겠다.
    			warningFile.setLevel(Level.WARNING); // warning level부터 찍겠다.
    			
    			logger.addHandler(logFile);
    			logger.addHandler(warningFile);
    			logger.addHandler(fineFile);
    	}	
    	
    	public static MyLogger getLogger(){
    		return instance;
    	}
    
    	public void log(String msg){
    		
    		logger.finest(msg);
    		logger.finer(msg);
    		logger.fine(msg);
    		logger.config(msg);
    		logger.info(msg);
    		logger.warning(msg);
    		logger.severe(msg);	
    	}
    	
    	public void fine(String msg){
    		logger.fine(msg);
    	}
    	
    	public void warning(String msg){
    		logger.warning(msg);
    	}
    }
    
    LoggerTest.java
    package ch11;
    
    public class LoggerTest {
    
    	public static void main(String[] args) {
    
    		MyLogger myLogger = MyLogger.getLogger();
    		
    		myLogger.log("test");
    	}
    
    }

    Result


    txtファイルに保存されたログ結果
    次の結果から、出力範囲はログ出力の範囲に依存することがわかります.

    コンソールのログ結果

    Reference

  • Fast Campas-JavaとSpring Web開発のプライマリ・ハイパー・パケットのオンライン化を一度に完了します。