mod_log_config - Apache HTTP Sunucusu Sürüm 2.4

Apache Server 2.4

<-

Apache Modülü mod_log_config

Açıklama:Sunucuya yapılan isteklerin günlük kayıtlarının tutulması
Durum:Temel
Modül Betimleyici:log_config_module
Kaynak Dosyası:mod_log_config.c

Özet

Bu modül istemci isteklerinin esnek şekilde günlüklenmesi ile ilgilidir. Günlükler kişiselleştirilebilir biçemdedir ve doğrudan bir dosyaya yazılabileceği gibi boru üzerinden harici bir sürece de yazılabilir. İsteğin özelliklerine bağlı olarak bazı isteklerin günlüklere kaydedilmesi veya kaydedilmemesi mümkün kılınmıştır.

Bu modül üç yönerge içermektedir: Bir günlük dosyası oluşturmak için TransferLog, günlük biçemini kişiselleştirmek için LogFormat ve tek başına bir günlük dosyasını hem tanımlayıp hem de biçemleyen CustomLog yönergesi. Her isteğin çok sayıda dosyaya günlüklenmesini sağlamak için yapılandırma dosyasında her sunucu için birden fazla TransferLog ve CustomLog yönergesi belirtilebilir.

top

Günlük Girdilerinin Kişiselleştirilmesi

LogFormat ve CustomLog yönergelerinin biçem argümanı bir dizgedir. Bu dizge her isteği günlük dosyasına günlüklemek için kullanılır. Doğrudan günlük dosyalarına kopyalanmak üzere dizgesel sabitler içerebileceği gibi satırsonu ve sekme karakterleri olarak C tarzı "\n" ve "\t" denetim karakterlerini de içerebilir. Dizgesel sabit olarak kullanılan tırnak ve tersbölü imlerinin tersbölü ile öncelenmesi gerekir.

İstek özellikleri biçem dizgesine “%” imli belirteçler yerleştirilerek günlüklenir. Bu belirteçler ve anlamları:

Belirteç Açıklama
%% Yüzde imi.
%a Uzak IP adresi ve isteğin portu (mod_remoteip modülüne bakın).
%{c}a bağlantının emsal IP adresi and portu (mod_remoteip modülüne bakın).
%A Yerel IP adresi.
%B HTTP başlıkları hariç, yanıtın bayt cinsinden uzunluğu.
%b HTTP başlıkları hariç, yanıtın bayt cinsinden uzunluğu. OGB biçeminde hiç bayt gönderilmemişse günlüğe '-' yerine '0' çıktılanır.
%{DEĞİŞKEN}C İstek içinde sunucuya gönderilen DEĞİŞKEN çerezinin içeriği. Sadece 0 sürümlü çerezler tam olarak desteklenir.
%D Mikrosaniye cinsinden isteği sunmak için harcanan zaman.
%{DEĞİŞKEN}e DEĞİŞKEN ortam değişkeninin içeriği.
%f Dosya ismi.
%h Uzak konak ismi. HostnameLookups yönergesine öntanımlı olan Off değeri atanmışsa, IP adresi günlüğe kaydedilir. Bir kaç konak için konak ismi de günlüğe kaydoluyorsa muhtemelen onların isimlerini içeren erişim denetim yönergelerine sahipsinizdir. Bak: Require host.
%H İstek Protokolü.
%{DEĞİŞKEN}i İstekle birlikte sunucuya gönderilen DEĞİŞKEN: başlık satır(lar)ının içeriği. Diğer modüllerde (örn. mod_headers) yapılan değişikliklerden etkilenir. Modüllerin çoğu bunu değiştirdiğinde önceki istek başlık isminin ne olduğuyla ilgileniyorsanız, başlığı bir ortam değişkenine kaydetmek için mod_setenvif modülünü kullanın ve yukarıda açıklandığı gibi bu değeri %{DEĞİŞKEN}e ile günlüğe kaydedin.
%k Bu bağlantıda işlenen isteklerin sayısı; yani örneğin, '1' değeri bağlantı kurulduktan sonraki ilk kalıcı bağlantıyı, '2', ikinci bağlantıyı, ..., vb. gösterir; KeepAlive kullanılmışsa değer anlamlıdır; aksi takdirde değer daima 0’dır.
%l Uzak kullanıcı kimliği (sağlanmışsa, identd üzerinden). mod_ident modülü mevcut ve IdentityCheck yönergesine değer olarak On atanmış olmadıkça bu belirteç için günlüğe tire imi yazılır.
%L Hata günlüğündeki istek günlük kimliği (veya bu istek için hata günlüğüne hiçbir şey kaydedilmemise '-'). Bu hataya neyin sebep olduğunu öğrenmek için ilgili hata günlüğü satırına bakın.
%m İstek yöntemi.
%{DEĞİŞKEN}n Diğer modüldeki DEĞİŞKEN bilgisinin içeriği.
%{DEĞİŞKEN}o Yanıttaki DEĞİŞKEN: başlık satır(lar)ının içeriği.
%p Sunucunun isteği sunduğu meşru port.
%{biçem}p Sunucunun veya istemcinin gerçek portu veya sunucunun isteği sunduğu meşru port. Geçerli biçemler: canonical, local ve remote (anlamları sırasıyla: meşru, yerel ve uzak).
%P İsteği sunan çocuk sürecin süreç kimliği.
%{biçem}P İsteği sunan çocuk sürecin süreç kimliği (pid) veya evre kimliği (tid). Geçerli biçemler: pid, tid, hextid. hextid için APR 1.2.0 veya üstü gerekir.
%q Sorgu dizgesi (bir sorgu dizgesi mevcutsa önüne bir ? eklenir yoksa hiçbir şey eklenmez).
%r İsteğin ilk satırı.
%s Durum. Dahili olarak yönlendirilmiş istekler için isteğin özgün durumudur. İsteğin son durumu için %>s kullanınız.
%t [18/Sep/2011:19:18:28 -0400] biçeminde isteğin alındığı tarih ve saat. Sondaki sayı zaman diliminin GMT'ye uzaklığıdır.
%{biçem}t İsteğin alındığı tarih ve saat; biçem uzatılmış strftime(3) biçeminde belirtilmelidir (genelde yerelleştirme amaçlı). begin: (öntanımlı) ile başlayan biçemlerde süre isteğin başlangıcına göredir. end: ile başlayan biçemlerde ise süre isteğin işlenmesinin bi,tmesine yakın, günlük girdisinin yazılmaya başladığı ana göredir. strftime(3) tarafından desteklenen biçemlere ek olarak aşağıdaki biçem dizgecikleri de desteklenmektedir:
secMutlak zaman başlangıcından (epoch) beri geçen saniye sayısı
msecMutlak zaman başlangıcından beri geçen milisaniye sayısı
usecMutlak zaman başlangıcından beri geçen mikrosaniye sayısı
msec_fracmilisaniyelik kesir
usec_fracmikrosaniyelik kesir
Bu dizgecikler, aynı biçem dizgesi içinde bir diğeriyle birlikte veya strftime(3) biçemlemesiyle birlikte yer alamazlar fakat çok sayıda %{biçem}t kullanılabilir.
%T Saniye cinsinden, isteği sunmak için harcanan zaman.
%{BİRİM}T BİRİM ile belirtilen zaman birimi cinsinden, isteği sunmak için harcanan zaman. Geçerli birimler: milisaniye için ms, mikrosaniye için us, saniye için s. s kullanımı birimsiz %T ile aynı sonucu verir; us kullanımı %D ile aynı sonucu verir. Birimli %T kullanımı 2.4.13 ve sonrasında geçerlidir.
%u Uzak kullanıcı (kimlik doğrulaması istenmişse vardır; durum kodu (%s) 401 ise yanlış olabilir).
%U Herhangi bir sorgu dizgesi içermeksizin istenen URL yolu.
%v İsteği sunan sunucunun meşru sunucu ismi (ServerName).
%V UseCanonicalName ayarı ile ilgili sunucu ismi.
%X Yanıt tamamlandığında bağlantı durumu:
X = Yanıt tamamlanmadan bağlantı koptu.
+ = Yanıt gönderildikten sonra bağlantı canlı kalabilir.
- = Yanıt gönderildikten sonra bağlantı kapatılacak.
%I İstek ve başlıklar dahil alınan bayt sayısı. Sıfır olamaz. Bunu kullanmak için mod_logio etkin olmalıdır.
%O Başlıklar dahil gönderilen bayt sayısı. Bir yanıtın gönderilmesinden önce istekten vazgeçilmesi gibi nadir durumlarda sıfır olabilir. Bunu kullanmak için mod_logio etkin olmalıdır.
%S Aktarılan bayt sayısı (alınan ve gönderilen), istekler ve başlıklar dahil; sıfır olamaz. %I ve %O'nun birleşimidir. Bunu kullanmak için mod_logio etkinleştirilmelidir.
%{ALANADI}^ti Sunucuya gönderilen istekteki ALANADI: Trailer satır(lar)ının içeriği.
%{VARNAME}^to Sunucudan gönderilen yanıttaki ALANADI: Trailer satır(lar)ının içeriği.

Değiştiriciler

Belli öğelerin sadece belli durum kodlarıyla ilgili yanıtlarla basılabilmesi için bu durum kodları % iminden hemen sonra virgüllerle ayrılmış olarak yazılabilir. Olumsuzlama belirtmek için durum kodu listesinin önüne bir "!" konabilir.

Biçem Dizgesi Anlamı
%400,501{User-agent}i Sadece 400 ve 501 hatalarında User-agent günlüğe kaydedilir. Diğer durum kodları için günlüğe "-" yazılır.
%!200,304,302{Referer}i 200,304,302 durum kodlarından biriyle dönmeyen tüm istekler için Referer başlığı durum koduyla birlikte günlüğe kaydedilir. Aksi takdirde günlüğe "-" yazılır.

İsteğin dahili olarak yönlendirilmesinde özgün durumunun mu yoksa son durumunun mu hesaba katılacağı "<" ve ">" değiştiricileri ile belirtilebilir. Öntanımlı olarak %s, %U, %T, %D, ve %r belirteçleri isteğin özgün durumuna bakarken diğerleri son durumuna bakarlar. Bu bakımdan örneğin, %>s belirteci, özgün istekteki kimliği doğrulanmış kullanıcının, dahili olarak kimlik doğrulaması gerekmeyen bir özkaynağa yönlendirilmesi halinde isteğin son durumunu kaydetmekte kullanılabilir.

Bazı Bilgiler

Güvenlik nedeniyle, 2.0.46 sürümünden itibaren %r, %i ve %o belirteçlerinde basılamayan karakterler ve diğer özel karakterler \xhh dizilimleri biçeminde öncelenmektedir. Burada hh yerine karakter numarasının onaltılık gösterimi yazılır. Bir tersbölü ile öncelenmesi gereken " ve \ ile \n, \t gibi C tarzı gösterimler bu kuralın dışındadır. 2.0.46 sürümünün öncesinde bu dizgeler öncelenmezdi ve ham günlük dosyalarıyla çalışırken dikkatli olmak gerekirdi.

2.0 sürümünden beri 1.3 sürümünün aksine %b ve %B biçem belirteçleri, istemciye gönderilen bayt sayısını değil, HTTP yanıtının bayt sayısını ifade ederdi (bu yanıt, örneğin, SSL kullanıldığında veya bağlantı koptuğunda farklı uzunlukta olur). Artık, ağa gönderilen gerçek bayt sayısını günlüğe kaydetmek için mod_logio modülü tarafından sağlanan %O biçem belirteci kullanılmaktadır.

Ek bilgi: mod_cache standat bir eylemci olarak değil hızlı bir eylemci olarak gerçeklenmiştir. Bu nedenle, içerik arabelleklemesi sözkonusu olduğunda %R biçem dizgesi herhangi bir eylemci bilgisi döndürmeyecektir.

Örnekler

Genelde herkesçe kullanılan günlük kaydı biçemleme dizgelerinden bazıları:

Ortak Günlük Biçemi (OGB)
"%h %l %u %t \"%r\" %>s %b"
Sanal Konaklı Ortak Günlük Biçemi
"%v %h %l %u %t \"%r\" %>s %b"
NCSA uzun/birleşik günlük biçemi
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
Referer başlığını içeren günlük biçemi
"%{Referer}i -> %U"
User-agent başlığını içeren günlük biçemi
"%{User-agent}i"

msec_frac gibi ek biçem dizgeciklerini kullanan bir zaman biçemi belirtmek isterseniz %{format}t biçem dizgesini defalarca kullanabilirsiniz:

Milisaniyeleri de içeren bir zaman damgası
"%{%d/%b/%Y %T}t.%{msec_frac}t %{%z}t"
top

Güvenlik Kaygıları

Günlük dosyarının kaydedildiği dizine sunucuyu başlatan kullanıcı dışında diğer kullanıcılar tarafından yazılabiliyor olması halinde güvenliğinizden nasıl feragat etmiş olacağınız güvenlik ipuçları belgesinde açıklanmıştır.

top

BufferedLogs Yönergesi

Açıklama:Günlük girdilerini diske yazmadan önce bellekte tamponlar
Sözdizimi:BufferedLogs On|Off
Öntanımlı:BufferedLogs Off
Bağlam:sunucu geneli
Durum:Temel
Modül:mod_log_config
Uyumluluk:2.0.41 ve sonrasında mevcuttur.

BufferedLogs yönergesi, mod_log_config modülünün çeşitli günlük girdilerini her isteğin hemen ardından tek tek değil, bir bütün halinde diske yazılmak üzere bellekte saklanmasını sağlar. Bu, bazı sistemlerde daha verimli disk erişimi, dolayısıyla daha yüksek başarım sağlayabilir. Sadece sunucu geneli için belirtilebilir, sanal konaklar için ayrı ayrı yapılandırılamaz.

Bir çökme günlük verisi kaybına sebep olacağından bu yönerge dikkatli kullanılmalıdır.
top

CustomLog Yönergesi

Açıklama:Günlük dosyasın ismini ve girdi biçemini belirler.
Sözdizimi:CustomLog dosya|borulu-süreç biçem|takma-ad [env=[!]ortam-değişkeni]| expr=ifade]
Bağlam:sunucu geneli, sanal konak
Durum:Temel
Modül:mod_log_config

CustomLog yönergesi istekleri günlüğe kaydetmek için kullanılır. Yönerge ile bir günlük biçemi belirtilebilir ve günlük kaydı isteğin özelliklerine bağlı olarak ortam değişkenleri vasıtasıyla şarta bağlı kılınabilir.

İlk argümanda günlüğün yazılacağı yer belirtilir. İki tür yer belirtilebilir:

dosya
ServerRoot yönergesinin değerine göreli bir dosya ismi.
borulu-süreç
"|" boru karakteri ile öncelenmiş olarak günlük bilgisini standart girdisinden kabul edecek sürecin ismi (veya komut satırı) Daha fazla bilgi için borulu günlüklere bakınız.

Güvenlik:

Bir borulu süreç kullanılmışsa, süreç httpd’yi başlatan kullanıcı tarafından başlatılacaktır. Sunucu root tarafından başlatılıyorsa bu root olacaktır; bu bakımdan günlük kaydını alacak programın güvenilir olması önemlidir.

Bilginize

Dosya yolunu belirtirken tersbölü çizgisi kullanılan Unix dışı platformlarda bile yapılandırma dosyasında bu amaçla normal bölü çizgilerini kullanmaya özen gösterilmelidir.

İkinci argümanda günlüğe ne yazılacağı belirtilir. Ya evvelce LogFormat yönergesi ile tanımlanmış bir takma-ad ya da içeriği Günlük Girdilerinin Kişiselleştirilmesi bölümünde açıklanmış bir biçem dizgesi olabilir.

Örneğin, aşağıdaki iki yönerge kümesi aynı etkiye sahiptir:

# Biçem dizgesi yerine takma ad içeren CustomLog
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "logs/access_log" common

# Biçem dizgesinin kendisini içeren CustomLog
CustomLog "logs/access_log" "%h %l %u %t \"%r\" %>s %b"

Üçüncü argüman isteğe bağlı olup,belli bir isteğin günlüğe kaydedilip kaydedilmeyeceğini belirler. Koşul, sunucu ortamında belli bir değişkenin varlığı veya yokluğu olabilir (bir 'env=!isim' durumu). İstenirse koşul keyfi bir mantıksal ifade olarak da belirtilebilir. Eğer koşul sağlanmazsa istek günlüğe kaydedilmez. İfadede bulunan HTTP başlıklarına başvurular bu başlık isimlerinin Vary başlığına eklenmesine sebep olmaz.

Ortam değişkenleri mod_setenvif ve/veya mod_rewrite modülleri kullanılarak her istek için ayrı ayrı atanabilir. Örneğin, GIF biçemli resimler için yapılan istekleri ana günlük dosyasına değil de başka bir dosyaya kaydetmek isterseniz:

SetEnvIf Request_URI \.gif$ gif-image
CustomLog "gif-requests.log" common env=gif-image
CustomLog "nongif-requests.log" common env=!gif-image

Veya eski RefererIgnore yönergesinin davranışını taklit etmek isterseniz:

SetEnvIf Referer example\.com localreferer
CustomLog "referer.log" referer env=!localreferer
top

GlobalLog Yönergesi

Açıklama:Günlük dosyasının ismini ve biçemini belirler
Sözdizimi:GlobalLog dosya|boru|sağlayıcı biçem|takma_ad [env=[!]ortam_değişkeni| expr=ifade]
Bağlam:sunucu geneli
Durum:Temel
Modül:mod_log_config
Uyumluluk:Apache HTTP Sunucusunun 2.4.19 ve sonraki sürümlerinde kullanılabilir.

GlobalLog yönergesi ana sunucu yapılandırması ve tüm tanımlı sanal konaklarca paylaşılan bir günlük tanımlar.

GlobalLog yönergesi aşağıdaki farklar dışında CustomLog yönergesine eşdeğerdir:

  • GlobalLog sanal konak bağlamında belirtilirse geçersizdir.
  • Sanal konaklar küresel bağlamda belirtilmiş bir CustomLog yönergesinin tersine GlobalLog yönergesini kendi CustomLog yönergesiymiş gibi kullanır.
top

LogFormat Yönergesi

Açıklama:Bir günlük dosyasında kullanılmak üzere girdi biçemi tanımlar.
Sözdizimi:LogFormat biçem|takma-ad [takma-ad]
Öntanımlı:LogFormat "%h %l %u %t \"%r\" %>s %b"
Bağlam:sunucu geneli, sanal konak
Durum:Temel
Modül:mod_log_config

Bu yönerge erişim günlüğü dosyasının girdi biçemini belirler.

LogFormat yönergesi iki şekilde kullanılabilir. Tek argüman belirtilebilen ilkinde daha sonra TransferLog yönergelerinde belirtilen günlüklerde kullanılmak üzere günlük biçemini belirler. Bu günlük biçemi yukarıda açıklanan biçem belirteçlerinden oluşur. Bu tek argüman yerine aşağıda açıklandığı gibi önceki bir LogFormat yönergesinde tanımlanmış bir günlük biçemine atıf yapan bir takma-ad da belirtilebilir.

LogFormat yönergesinin ikinci kullanım şeklinde biçem bir takma-ad için tanımlanır. Bu takma ad daha sonraki LogFormat veya CustomLog yönergelerinde aynı biçem dizgesini uzun uzadıya yazmamak için takma-ad olarak kullanılır. Bir LogFormat yönergesi bir takma ad tanımlamaktan başka bir şey yapmaz; yani, yaptığı iş sadece bir takma ad tanımlamaktan ibarettir, biçemi uygulamaz veya biçemi öntanımlı hale getirmez. Bu bakımdan sonraki TransferLog yönergelerini de etkilemeyecektir. Ayrıca, LogFormat yönergesi bir takma ada başka bir takma ad tanımlamakta da kullanılamaz. Bir takma adın yüzde imi (%) içeremeyeceğine de dikkat ediniz.

LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
top

TransferLog Yönergesi

Açıklama:Bir günlük dosyasının yerini belirtir.
Sözdizimi:TransferLog dosya|borulu-süreç [takma-ad]
Bağlam:sunucu geneli, sanal konak
Durum:Temel
Modül:mod_log_config

Bir günlük biçemi tanımlanmasını ve şarta bağlı günlük kaydını mümkün kılmaması haricinde CustomLog yönergesi gibidir. Günlük biçemi yerine kendinden önce yer alan bir LogFormat yönergesinde tanımlanan bir takma ad kullanılır. Açıkça bir günlük biçemi takma adı belirtilmedikçe Ortak Günlük Biçemi öntanımlıdır.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
TransferLog "logs/access_log"