Programlar

# rotatelogs - Apache günlüklerini döndürmek için borulu günlük kayıt programı

`rotatelogs`, Apache'nin borulu günlük dosyaları özelliği ile birlikte kullanmak için tasarlanmış basit bir programdır. Günlük dosyasının azami boyutuna göre veya belli aralıklarla günlük dosyalarını döndürür.

# Kullanım

`rotatelogs [ -l ] [ -L isim ] [ -p program ] [ -f ] [ -D ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n dosya_sayısı ] dosyaismi süre|boyut(B|K|M|G) [ saat_farkı ]`

# Seçenekler

`-l`
  GMT yerine yerel zamanın kullanılmasını sağlar.
`-L` bagismi
  Belirtilen bağ dosyası ismine geçerli günlük dosyasından kalıcı bir bağ oluşturulur. `tail -F bagismi` gibi bir komut kullanılarak günlüğün sürekli izlenmesi için kullanılabilir.
`-p` program
  Belirtildiği takdirde, `rotatelogs` yeni bir günlük dosyasının her açılışında belirtilen programı çalıştırır. Yeni açılan dosyanın ismi programa ilk argüman olarak aktarılır. Bu işlem bir döndürme sonrası yapılırsa eski günlük dosyası ikinci argüman olarak aktarılır. `rotatelogs` işlemini sürdürmek için belirtilen programın sonlanmasını beklemez, dolayısıyla sonlanma soucunda döndürülen hata kodunu günlüğe kaydetmez. Çalıştırılan program `rotatelogs` ile aynı stdin, stdout ve stderr'i kullanır ve ortamı da miras alır.
`-f`
  İlk günlük giridisinin okunmasını beklemeden `rotatelogs` başlar başlamaz günlük dosyasının açılmasını sağlar. Çok meşgul sitelerde, sunucu başlatılıp ilk istek sunuluncaya kadar geçen zamanda günlük dosyasının yokluğu özdevinimli işlemler yapan bazı günlükleme araçlarında sorunlara yol açabilir. Bu seçenek bu gibi durumlarda yararlıdır.
`-D`
  Günlük dosyasının yerleştirileceği dizini (eğer yoksa) üst dizinleri ile birlikte yapılandırır. Bu, `strftime(3)` işlevinin sırf dosya için değil yol için de kullanılmasını sağlar.
`-t`
  Günlük dosyasının döndürülmek yerine tepeden kırpılmasına sebep olur. Günlüğün `tail` gibi bir araç tarafından gerçek zamanda işlendiği ve veriyi saklamanın gerekmediği durumda kullanışlıdır. Dosya ismine bir sonek eklenmez, ancak biçem dizgesi '%' karakteri içeriyorsa buna uyulur.
`-v`
  Standart hataya verilen çıktı daha ayrıntılı olur. Çıktı, yapılandırma çözümlemesinin sonuçlarını ve tüm dosya açma/kapama işlemlerini içerir.
`-e`
  Günlüğü standart çıktıya basar. Günlüğün zincirdeki ilgili araç tarafından gerçek zamanda işlenmesi gerektiğinde kullanışlıdır.
`-c`
  Create log file for each interval, even if empty.
`-n dosya_sayısı`
  Zaman damgalarına bakılmaksızın bir dosya serisi açılır. Örneğin -n3 belirtilirse "logfile", "logfile.1", "logfile.2" serisi açılır ve "logfile" üzerine yazılır. 2.4.5 ve sonraki sürümler içindir.
`dosyaismi`

  Günlük dosyasının ismi yoluyla birlikte belirtilir. dosyaismi '%' karakterleri içeriyorsa bunlar `strftime(3)` biçem belirteçleri olarak ele alınır. Aksi takdirde, özdevinimli olarak .nnnnnnnnnn uzantısı üretilir. (`-t` seçeneği kullanılmadıkça) Uzantı saniye cinsindendir ve her iki durumda da bu değer, mevcut döngü diliminin başlangıcına göre hesaplanır. Örneğin, döndürmenin 86400 saniyede bir yapılacağı belirtilmişse, `strftime(3)` biçeminde oluşturulan saat, dakika ve saniye alanları, 24 saatlik sürenin başlangıcını (geceyarısı) göstermek üzere sıfırlarla doldurulur.

  `strftime(3)` dosyaismi biçemlemesi kullanılırken, günlük dosyası biçeminin günlük dosyası döndürülürken her zaman farklı bir dosya ismi üretecek yeterlilikte parçacıklı yapıya sahip olduğundan emin olmalısınız. Aks takdirde döndürme işlemi yeni bir dosya başlatmak yerine hep aynı dosyanın üzerine yazar. Örneğin, logfile için `/var/log/errorlog.%Y-%m-%d` belirtilmişse 5 mega baytta bir yeni bir günlük dosyasına başlanacaktır. Fakat 5 megabayta gün içinde iki kez ulaşılırsa aynı günlük dosyası üretilir ve günlük hep aynı dosyanın üzerine yazılır.

`süre`
  Günlük dosyasının yenisinin kaç saniyede bir açılacağı belirtilir. Örneğin, bu süre 3600 saniye ise günlük dosyası her saat başında yenilenir; 86400 saniye ise her geceyarısı yenilenir. (Bu süre zarfında günlüğe kaydedilecek bir olay gerçekleşmemişse dosya oluşturulmaz.)
`boyut(B|K|M|G)`
  Boyuta göre döndürme için azami dosya boyutu. Belirtilenin bir süre değil de bir boyut değeri olarak ele alınması için değerin sonuna şu karakterlerden biri eklenmelidir: `B` (Bayt), `K` (kilobayt), `M` (megabayt), `G` (gigabayt).

  Süre ve boyut birlikte belirtilmişse boyut süreden sonra belirtilmelidir. Dosya yenilemesi, bunlardan hangisi daha önce aşılırsa o zaman gerçekleşir.

`saat_farkı`
  Koordinatlı evrensel zamana göre "dakika" farkı. Belirtilmezse, sıfır öntanımlıdır. Örneğin, -5 saatlik bir zaman diliminde bulunuyorsanız bu değer `-300` olmalıdır. Çoğu durumda, bunun yerine `-l` seçeneğini kullanmak gerekir.

# Örnekler

CustomLog "|bin/rotatelogs /var/log/logfile 86400" common

nnnn, günlük kaydının başladığı sistem zamanı olmak üzere /var/log/logfile.nnnn dosyası oluşturulur. Bu zaman, daima döngü süresinin katları olacağından bunu cron betiklerinizi eşzamanlamakta kullanabilirsiniz. Her döngü süresinin sonunda (burada 24 saat sonra) yeni bir günlük dosyası açılır.

CustomLog "|bin/rotatelogs -l /var/log/logfile.%Y.%m.%d 86400" common

yyyy, yıl; mm, ay; dd, ayın gününü belirtmek üzere /var/log/logfile.yyyy.mm.dd dosyası oluşturulur. Her gün yerel zamanla geceyarısı yeni bir günlük dosyasına geçilecektir.

CustomLog "|bin/rotatelogs /var/log/logfile 5M" common

Günlük dosyası 5 megabaytlık olunca yenisinin oluşturulmasını sağlar.

ErrorLog "|bin/rotatelogs /var/log/errorlog.%Y-%m-%d-%H_%M_%S 5M"

Hata günlüğünün 5 megabaytta bir `errorlog.YYYY-mm-dd-HH_MM_SS` biçemli bir isimle oluşturulmasını sağlar.

CustomLog "|bin/rotatelogs -t /var/log/logfile 86400" common

/var/log/logfile dosyasını oluşturur, sunucu başlatılırken ve günde bir kere dosyanın tepesi kırpılır. Bu senaryoda ayrı bir sürecin (tail gibi) dosyayı gerçek zamanlı işleyeceği umulur.

# Taşınabilirlik

Aşağıdaki günlük dosyası biçem belirteçlerinin tüm `strftime(3)` gerçeklenimlerince desteklenmesi gerekir. Kullandığınız kütüphaneye özgü belirteçler için sisteminizdeki `strftime(3)` kılavuz sayfasına bakınız.

`%A` | tam gün ismi (yerelleştirilmiş)
`%a` | 3 harflik gün ismi (yerelleştirilmiş)
`%B` | tam ay ismi (yerelleştirilmiş)
`%b` | 3 harflik ay ismi (yerelleştirilmiş)
`%c` | tarih ve saat (yerelleştirilmiş)
`%d` | 2 haneli ay günü numarası
`%H` | 2 haneli saat (24 saatlik)
`%I` | 2 haneli saat (12 saatlik)
`%j` | 3 hanelik yıl günü numarası
`%M` | 2 haneli dakika
`%m` | 2 haneli ay
`%p` | 12 saatlik kip için öö/ös (yerelleştirilmiş)
`%S` | 2 haneli saniye
`%U` | 2 haneli yılın hafta numarası (Haftanın ilk gününün Pazar olduğu varsayımıyla)
`%W` | 2 haneli yılın hafta numarası (Haftanın ilk gününün Pazartesi olduğu varsayımıyla)
`%w` | 1 hanelik haftanın gün numarası (Haftanın ilk gününün Pazar olduğu varsayımıyla)
`%X` | saat (yerelleştirilmiş)
`%x` | tarih (yerelleştirilmiş)
`%Y` | 4 hanelik yıl
`%y` | 2 hanelik yıl
`%Z` | zaman dilimi ismi
`%%` | `%' iminin kendisi