mod_log_config - Apache HTTP Sunucusu

Apache HTTP Sunucusu Sürüm 2.2

Apache > HTTP Sunucusu > Belgeleme > Sürüm 2.2 > Modüller

# Apache Modülü mod_log_config

Mevcut Diller: en | ja | ko | tr

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.

### Yönergeler

### Konular

- Günlük Girdilerinin Kişiselleştirilmesi
- Güvenlik Kaygıları

### Ayrıca bakınız:

- Apache Günlük Dosyaları

- Yorum

## 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
`%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.
`%{Fesmekan}C` | İstek içinde sunucuya gönderilen Fesmekan çerezinin içeriği. Sadece 0. sürüm çerezler tam olarak desteklenir.
`%D` | Mikrosaniye cinsinden isteği sunmak için harcanan zaman.
`%{FALANCA}e` | FALANCA ortam değişkeninin içeriği.
`%f` | Dosya ismi
`%h` | Uzak konak
`%H` | İstek Protokolü
`%{Filanca}i` | İstekle birlikte sunucuya gönderilen `Filanca:` başlık satır(lar)ının içeriği. Diğer modüllerde (örn. `mod_headers`) yapılan değişikliklerden etkilenir. Çok sayıda modülün istek başlığını değişikliğe uğrattığı durumda istek başlığında başta neyin geldiği ile ilgileniyorsanız, başlığı `mod_setenvif` ile bir ortam değişkenine kopyalayıp yukarıda açıklandığı gibi `%{FALANCA}e` ile bu değeri günlükte kullanabilirsiniz.
`%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 (ilk isteği belirten) 0’dır. 2.2.11 sürümünden beri kullanılabilmektedir.
`%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.
`%m` | İstek yöntemi
`%{Filanca}n` | Diğer modüldeki Filanca bilgisinin içeriği.
`%{Filanca}o` | Yanıttaki `Filanca:` 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ı.
`%R` | Yanıt varsa yanıtı üreten eylemci.
`%s` | Durum. Dahili olarak yönlendirilen istekler için isteğin *özgün* durumudur --- isteğin son durumu için `%>s` kullanınız.
`%t` | İsteğin alındığı tarih ve saat (standart ingiliz biçemi).
`%{biçem}t` | İsteğin alındığı tarih ve saat; biçem `strftime(3)` biçeminde belirtilmelidir (genelde yerelleştirme amaçlı).
`%T` | Saniye cinsinden, isteği sunmak için harcanan zaman.
`%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.
(Apache 1.3’ün son sürümlerinde bu belirteç `%c` idi fakat geçmişe yönelik olarak `%{isim}c` ssl sözdizimi ile çelişiyordu.)
`%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ı; sıfır olamaz.Bunu kullanmak için `mod_logio` etkin olmalıdır.

### 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. Örneğin, `"%400,501{User-agent}i"` belirteci, `User-agent` başlığını sadece 400 ve 501 hatalarında günlüğe kaydeder. Diğer durum kodları için günlüğe `"-"` yazılır. Durum kodlarını olumsuzlamak için başa bir "`!`" konabilir. Örneğin, `"%!200,304,302{Referer}i"` belirteci, 200,304,302 durum kodlarından biriyle dönmeyen tüm istekler için `Referer` başlığını durum koduyla birlikte günlüğe kaydedecektir.

İ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ünde 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.

Dikkat: `mod_cache` standart bir eylemci olarak değil hızlandırılmış bir eylemci olarak gerçeklenmştir. Bu bakımdan `%R` biçem dizgesi içerik önbelleklemesi ile ilgili 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"`

## 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.

## 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.

Bu yönerge deneyseldir ve dikkatli kullanılmalıdır.

## CookieLog Yönergesi

Açıklama: | Çerezleri günlüğe kaydetmek için dosya ismi belirtmekte kullanılır.
Sözdizimi: | `CookieLog dosya-adı`
Bağlam: | sunucu geneli, sanal konak
Durum: | Temel
Modül: | mod_log_config
Uyumluluk: | Bu yönergenin kullanımı önerilmemektedir.

`CookieLog` yönergesi çerezleri günlüğe kaydetmek için dosya ismi belirtir. Dosya isminin `ServerRoot` değerine göre belirtildiği varsayılır. Yönerge `mod_cookies` ile uyumluluk için vardır ve kullanımı önerilmemektedir.

## 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]`
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ükler ile ilgili ek bilgilere bakın.

  ### 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, sunucu ortamında belli bir değişkenin varlığına bağlı olarak belli bir isteğin günlüğe kaydedilip kaydedilmeyeceğini belirler. Eğer istek için belirtilen ortam değişkeni mevcutsa (veya '`env=!değişken`' durumunda mevcut değilse) istek günlüğe kaydedilir.

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 yerel-atif
CustomLog referer.log referer env=!yerel-atif`

## 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.

### Örnek

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

## 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.

### Örnek

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

Mevcut Diller: en | ja | ko | tr

## Yorum

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.