Logging API

Projelerde loglama hem son kullanıcılar hem de sistem yöneticileri için uygulamanın devamlılığı açısından çok önemlidir. Java’da karşılaşılan güvenlik hataları, konfigürasyon hataları, performans sıkıntıları veya uygulamadaki bug’lar için Logging API kullanılır.

java.util.logging paketinde tanımlanmıştır.

Logging API, bilgileri metin veya XML formatında log kayıtlarını hafızaya, output streamlere, konsola ya da dosyaya yazabilir.

Logging API’yi kullanabilmek için sırasıyla şunlar yapılır :

  1. Logger objesi yaratılır.
  2. Logger objesi konfigure edilir.
  3. Logger objesine mesajlar gönderilir.

Logger objesini yaratmak için java.util.Logger sınıfındaki static getLogger() metodu kullanılır.

Logger logger = Logger.getLogger(“paket.Sinif”);

NOT : Genellikle biricikliği sağlamak için parametre olarak paket ve sınıf ismi verilir. (Tüm sınıf ismi)

Logger objesini konfigure etmek için logger objesine handler tanımlanır. Log seviyesi belirlenir. İsteğe bağlı olarak da filtre tanımlanır.

Logging API’si şu handlerları destekler :

  • StreamHandler (default) : Formatlanmış kayıtları OutputStream objesine yazar.
  • ConsoleHandler : System.err objesine yazar.
  • FileHandler : Bir veya daha fazla dosyaya loglama yapar.
  • SocketHandler : Uzak TCP portlarına loglama yapar.
  • MemoryHandler : Hafızaya logları bufferlar.

Logger’a bir handler eklemek için addHandler() metodu kullanılır. Örnek :

logger.addHandler(new FileHandler(“iko.log”));

Log Seviyeleri:

–          ALL : Tüm mesajlar loglanır.

–          CONFIG : Static konfigurasyon mesajları için kullanılır.

–          FINEST :  Çok fazla detaylı mesajlama için kullanılır.

–          FINER : Daha az ama detaylı mesajlama için kullanılır.

–          FINE : İyi bir mesajlama seviyesidir.

–          INFO : Bilgi mesajlarını loglamak için kullanılır.

–          WARNING : Potansiyel bir problemin ikazlarını loglamak için kullanılır.

–          SEVERE : Çok önemli hataların loglarını yapabilmek için kullanılır.

–          OFF : Loglamayı kapatmak için kullanılır.

Level sınıfından başka sınıflar türeterek kendi seviyemizi yaratabiliriz. Ayrıca setLevel() metodu ile kullanılacak minimum kademeyi seçebiliriz.

Örnek : logger.setLevel(Level.INFO);

Yine aynı şekilde handler objesine de hangi seviyede loglama yapılacağı bilgisini söyleyebiliriz.

Örnek : handler.setLevel(Level.WARNING);

Loglama konfigurasyonu, log için kullanılan ve startup anında okunan konfügurasyon dosyası ile ayarlanabilir. Bu dosya java.util.Properties formatındadır.

 

[codesyntax lang=”java” lines=”no”]

package com.javauzmani.logging;

import java.util.logging.ConsoleHandler;

import java.util.logging.Level;

import java.util.logging.Logger;

/**

 *

 * @author Erkin Pehlivan

 */

public class BasitLoglamaOrnegi {

    public static void main(String[] args) {

        // Logger nesnesi yaratalim

        Logger logger = Logger.getLogger("com.javauzmani.BasitLoglamaOrnegi");

        // konfigure edelim

        logger.addHandler(new ConsoleHandler());

        logger.setLevel(Level.FINE);

        // Farkli seviyelerde log mesajlari

        // loglama icin 7 tane farkli seviye var

        logger.severe("Level:Severe ");

        logger.warning("Level:Warning");

        logger.log(Level.WARNING, "Uyarı mesajı için farklı bir loglama örneği");

        logger.info("Level:info");

        logger.config("Level:configmessage");

        logger.fine("Level:fine");

        logger.log(Level.FINE, "FINE seviyesinde bir loglama örneği");

        logger.finer("Level:finer");

        logger.finest("Level:finest");

    }

}

[/codesyntax]