1.1 Günlüklere giriş

Günlük, meydana gelen olayların bir listesidir. Neredeyse bir denizcilik günlüğü veya günlüğü gibi. Buna göre, bir kaydedici , oturum açabileceğiniz bir nesnedir. Programlamada, neredeyse her şeyi günlüğe kaydetmek gelenekseldir. Ve Java'da her şey böyle ve hatta biraz daha fazlası.

günlükçü javası

Gerçek şu ki, Java programları genellikle kullanıcı arayüzü, konsol vb. Olmayan büyük sunucu uygulamalarıdır. Binlerce kullanıcıdan gelen istekleri aynı anda işlerler ve sıklıkla çeşitli hatalar oluşur. Özellikle farklı iplikler birbirine karışmaya başladığında.

Ve aslında, böyle bir durumda nadiren yeniden üretilen hataları ve başarısızlıkları bulmanın tek yolu, her iş parçacığında olan her şeyi günlüğe / dosyaya yazmaktır .

Çoğu zaman, günlüğe çağrıldığı yöntemin parametreleri, yakalanan tüm hatalar ve birçok ara bilgi hakkında bilgi yazılır. Günlük ne kadar eksiksiz olursa, olayların sırasını geri yüklemek ve bir arızanın veya hatanın nedenlerini izlemek o kadar kolay olur.

Ancak kütük ne kadar büyükse, onunla çalışmak o kadar zor olur. Bazen günlükler günde birkaç gigabayta ulaşır. Bu iyi.

1.2 Başarısız günlükler

İlk günlükler olarak, geliştiriciler basitçe çıktıyı konsola kullandılar . Uygulama hata ayıklaması sırasında - tüm önemli bilgiler ve değişken değerler konsola yazıldığında bunu yapmak uygundur. Ancak böyle bir günlük, uygulamanın normal çalışması sırasında tamamen uygulanamaz.

İlk olarak, uygulama konsolun kendisine bir çıktı vermek isteyebilir ve kullanıcı, programcıya yönelik hizmet bilgilerini hiç görmek istemez.

İkincisi, konsol arabelleğinin boyutu sınırlıdır, oraya fazla yazamazsınız.

Ve son olarak, üçüncüsü, uzun bir süre boyunca toplanan program hataları hakkında bilgi program geliştiricilere gönderilmelidir. Ve tüm bu bilgileri bir kerede bir dosyaya yazmak en uygunudur.

Geliştiriciler ilk sorunu hızla çözdüler - başka bir çıktı akışı buldular - System.err. Ona mesaj yazabilirsiniz ve standart konsola değil, ayrı bir konuya gönderilirler.

Ve bir dosyaya yazma sorunu bile çözüldü:

// Define the file to which we will write the log
System.setErr(new PrintStream(new File("log.txt")));
// Display messages
System.err.println("Message 1");
System.err.println("Message 2");
// Display an error message
try {
    throw new Exception("Error message");
} catch (Exception e) {
    e.printStackTrace();
}

Ancak bu formda bile tüm sorunu çözmedi, bu nedenle günlük mesajlarını bir dosyaya yazacak özel bir kitaplık oluşturmaya karar verildi. Bunu akıllı bir şekilde yaptı ve günlüğe kaydedilen olaylar ve veriler için filtreleri yapılandırma esnekliği sağladı.

Tüm günlük kaydı süreci aslında üç bölümden oluşur:

  • İlk bölüm bilgi toplamadır .
  • İkinci kısım, toplanan bilgilerin filtrelenmesidir .
  • Üçüncü bölüm, seçilen bilgilerin kaydedilmesidir .

1.3 log4j günlüğüne giriş

Java topluluğundaki ilk popüler günlükçü log4j. Projeye dahil etmek çok basit, bunun için pom.xml dosyanıza sadece birkaç satır eklemeniz yeterli.


<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>2.2.17</version>
</dependency>

Programınızın böyle bir günlükçü ile etkileşimi şuna benzer:

class Manager {
   private static final Logger logger = LoggerFactory.getLogger(Manager.class);

   public boolean processTask(Task task) {
        logger.debug("processTask id = " + task.getId());
        try {
            task.start();
            task.progress();
            task.complete();
            return true;
        } catch (Exception e) {
            logger.error("Unknown error", e);
            return false;
        }
    }
}

Burada üç şey olur:

Nesnenin oluşturulması yeşil renkle vurgulanır Logger . Nesnesi, onunla daha fazla çalışmak için statik bir değişkende saklanır. Ayrıca getLogger()bilgilerin toplandığı sınıfla ilgili bilgiler de metoda iletilir.

Mavi ile vurgulanan satır, yalnızca hata ayıklama sırasında değerli bilgileri günlüğe kaydettiğimiz yerdir . Bunun için özel bir yöntem kullanılır -debug()

Ve son olarak, logda ortaya çıkan istisnayı kaydettiğimiz satır kırmızı ile vurgulanır . İstisnalar olası hatalardır, bu nedenle error().