Goder

Sample [TR] : GOLang ile Mini Log Uygulaması

Introduction

Cihan Özhan

Cihan Özhan

Hakkımda bilgi içeren blog sayfam; http://www.cihanozhan.com/cihan-ozhan/


LATEST POSTS

Sample [TR] : GOLang ile Inheritance ve Interface Kullanımı 31st October, 2016

Sample [TR] : GOLang ile Metot ve İç İçe Struct Kullanımı 30th October, 2016

Sample

Sample [TR] : GOLang ile Mini Log Uygulaması

Posted on .

Merhabalar,

Geliştirdiğimiz GOLang uygulamaları içerisinde hata, sorun tespiti vb. gibi bazı durumlarda bilgi almak ya da bir veri kaynağına bu veriyi depolama ihtiyacı duyarız. Buna genel anlamda loglama diyoruz. Bu logları daha sonra gerek bilgi gerek uygulamanın güçlendirilmesi gerekse de oluşan hataların giderilmesi için inceleriz. GOLang ile de gelişmiş bir çok farklı kütüphanesi olsa da en basit ve temel olarak kendi paketleri içerisinde bulunan log mekanizmasını inceliyor olacağız.

Olası genel loglama durumları;

  • TRACE : Belli koşullarda gerçekleştiren olayları “izlemek” amacıyla kullanılır. Örn; sistem performansı, güvenlik politikaları, işlemler vb. Kritik değildir. Uygulama bazında gereklidir.
  • INFO : Uygulama içerisinde gerçekleşen ve yorum ya da açıklama gereken olası durumlar için kullanılan bilgi notudur. Örn; “X no’lu kullanıcı, X zamanda, 123 no’lu bankamatikten, 456 no’lu bankamatiğe 50 TL havale işlemi gerçekleştirdi.
  • WARNING : Kullanıcı ya da uygulama bazında gerçekleşen kritiklik seviyesi çok yüksek olmayan ama işlemsel sorunlara neden olabilecek önemli bilgilendirme uyarılarıdır.
  • ERROR : Kullanıcı, uygulama ya da tüm platform bazında gerçekleşebilecek olası yazılımsal ve işlemsel hatalarda kullanılır. Uygulamanın çökmesi ya da kullanıcının basit bir sıfıra bölme işlemi gerçekleştirme isteği buna birer örnektir.

Örnek uygulamamızda bu 4 seviyeyi de işleyecek ve gerekli aksiyonları alacağız. Örneğin TRACE modunda bir log tutmayacağız. Eğer istenirse bir konsol ekranında olası TRACE durumları akış şeklinde gösterilebilir. INFO, WARNING ve ERROR durumlarında konsol ekranından bu bilgilendirmeleri göstereceğiz. Aynı zamanda WARNING ve ERROR durumlarında hem konsoldan göstereceğiz hem de logs.txt adında bir dosya oluşturup içerisine ilgili logları yazacağız.

package main

import (
    "io"
    "io/ioutil"
    "log"
    "os"
)

var (
    Trace *log.Logger
    Info *log.Logger
    Warning *log.Logger
    Error *log.Logger
)

func init() {

    file, err := os.OpenFile("logs.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)

    if err != nil {
        log.Fatalln("Log dosyası oluşturulurken bir hata meydana geldi : ", err)
    }

    Trace = log.New(ioutil.Discard, "TRACE : ", log.Ldate|log.Ltime|log.Lshortfile)
    Info = log.New(os.Stdout, "INFO : ", log.Ldate|log.Ltime|log.Lshortfile)
    Warning = log.New(io.MultiWriter(file, os.Stderr), "WARNING : ", log.Ldate|log.Ltime|log.Lshortfile)
    Error = log.New(io.MultiWriter(file, os.Stderr), "ERROR : ", log.Ldate|log.Ltime|log.Lshortfile)
}

func main() {

    Trace.Println("Olağan ıvır zıvır birşeyler var.")
    Info.Println("Özel bilgilendirme ya da loglama gerekecek bilgi var.")
    Warning.Println("Bu önemli bir durum! Olağan dışı bir müdahale gerekebilir.")
    //Error.Println("Bu bir hata! Artık çok geç!")

}

Uygulamayı çalıştırdığınızda konsol ekran çıktısı;

x1

 
Oluşturulan logs.txt dosya içeriği;

WARNING : 2016/09/08 15:08:04 customizelog.go:35: Bu önemli bir durum! Olağan dışı bir müdahale gerekebilir.

Şahsen uygulama içerisinde sadece WARNING ve ERROR loglarına kayıt imkanı verdiğim için logs.txt de INFO bilgisi bulunmamaktadır. Eğer ERROR logu da üretseydim o da logs.txt de kayıtlı olacaktı.

Kaynak : http://www.cihanozhan.com/golang-ile-mini-log-uygulamasi

Cihan Özhan

Cihan Özhan

http://www.cihanozhan.com

Hakkımda bilgi içeren blog sayfam; http://www.cihanozhan.com/cihan-ozhan/

There are no comments.

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (0) ...
Navigation