]> granicus.if.org Git - apache/blob - docs/manual/logs.xml.tr
23c6a678195f6e379646aa33aefedc538fc559f4
[apache] / docs / manual / logs.xml.tr
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?>
4 <!-- English Revision: 1300924:1741842 (outdated) -->
5 <!-- =====================================================
6  Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
7    Reviewed by: Orhan Berent <berent belgeler.org>
8 ========================================================== -->
9
10 <!--
11  Licensed to the Apache Software Foundation (ASF) under one or more
12  contributor license agreements.  See the NOTICE file distributed with
13  this work for additional information regarding copyright ownership.
14  The ASF licenses this file to You under the Apache License, Version 2.0
15  (the "License"); you may not use this file except in compliance with
16  the License.  You may obtain a copy of the License at
17
18      http://www.apache.org/licenses/LICENSE-2.0
19
20  Unless required by applicable law or agreed to in writing, software
21  distributed under the License is distributed on an "AS IS" BASIS,
22  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23  See the License for the specific language governing permissions and
24  limitations under the License.
25 -->
26
27 <manualpage metafile="logs.xml.meta">
28
29   <title>Günlük Dosyaları</title>
30
31   <summary>
32     <p>Bir HTTP sunucusunu verimli şekilde yönetebilmek için oluşabilecek
33       sorunlardan başka sunucunun başarımı ve etkinliği hakkında da bazı geri
34       bildirimler almak gerekir. Apache HTTP Sunucusu çok kapsamlı ve esnek
35       bir günlükleme yeteneğine sahiptir. Bu belgede sunucunun günlükleme
36       yeteneğini nasıl yapılandıracağınızdan ve günlük kayıtlarını nasıl
37       yorumlayacağınızdan bahsedilecektir.</p>
38   </summary>
39
40     <section id="overview">
41     <title>Giriş</title>
42
43   <related>
44       <modulelist>
45         <module>mod_log_config</module>
46         <module>mod_log_forensic</module>
47         <module>mod_logio</module>
48         <module>mod_cgi</module>
49       </modulelist>
50   </related>
51
52   <p>Apache HTTP Sunucusu, isteğin ilk alınışından itibaren, URL eşleme
53     işlemleri, bağlantının son çözümlemesi ve bu işlemler sırasına ortaya çıkan
54     hatalar da dahil olmak üzere sunucunuzda meydana gelen herşeyi günlüklemek
55     için çok çeşitli mekanizmalar içerir. Buna ek olarak, günlükleme
56     yetenekleri sağlayan üçüncü parti modüller de kullanılabilir veya mevcut
57     günlük dosyalarına girdiler enjekte edilebilir. Ayrıca, CGI programları,
58     PHP betikleri ve benzerleri sunucu hata günlüğüne kendi iletilerini
59     gönderebilirler.</p>
60
61   <p>Bu belgede Apache HTTP Sunucusunun standart parçası olan günlükleme
62     modülleri hakkında bilgi verilecektir.</p>
63
64   </section>
65
66   <section id="security">
67     <title>Güvenlik Uyarısı</title>
68
69     <p>Apache httpd’nin günlük dosyalarını yazdığı dizine yazabilen birinin sunucuyu
70       başlatan kullanıcı kimliğine (bu genellikle root olur) erişim
71       kazanabileceğine hemen hemen kesin gözüyle bakılabilir. Sonuçlarının
72       neler olacağını kestiremiyorsanız günlüklerin yazıldığı dizinde <em>hiç
73       kimseye</em> yazma erişimi vermeyin; ayrıntılı bilgi için <a
74       href="misc/security_tips.html">güvenlik ipuçları</a> belgesine
75       bakınız.</p>
76
77     <p>Buna ilaveten, günlük dosyaları istemci tarafından sağlanmış bilgiler
78       de içerebilir. Bu nedenle, kötü niyetli istemcilerin günlük dosyalarına
79       denetim karakterleri girmeleri olasılığına karşı ham günlükler ele
80       alınırken dikkatli olunmalıdır.</p>
81   </section>
82
83   <section id="errorlog">
84     <title>Hata Günlüğü</title>
85     <related>
86       <modulelist>
87         <module>core</module>
88       </modulelist>
89       <directivelist>
90         <directive module="core">ErrorLog</directive>
91         <directive module="core">ErrorLogFormat</directive>
92         <directive module="core">LogLevel</directive>
93       </directivelist>
94     </related>
95
96     <p>İsmi ve yeri <directive module="core">ErrorLog</directive> yönergesi
97       ile belirtilen sunucu hata günlüğü, en önemli günlük dosyasıdır. Apache
98       httpd tarafından istekler işlenirken saptanan hatalar ve tanı bilgileri
99       bu dosyaya gönderilir. Sunucuyu başlatırken veya sunucu çalışırken bir
100       sorunla karşılaşıldığında, neyin yanlış gittiğini öğrenmek için
101       bakılacak ilk yer burasıdır. Günlük kaydı çoğunlukla sorunun nasıl
102       düzeltileceği ile ilgili ayrıntıları da içerir.</p>
103
104     <p>Hata günlüğü normal olarak bir dosyaya yazılır (genellikle, dosyanın
105       ismi Unix sistemlerinde <code>error_log</code>, OS/2 ve Windows’ta ise
106       <code>error.log</code>’dur). Ayrıca, Unix sistemlerinde sunucunun
107       hataları <code>syslog</code>’a veya <a href="#piped">borulamak suretiyle
108       bir programa</a> aktarması da mümkündür.</p>
109
110     <p>Hata günlüğünün biçemi <directive module="core"
111       >ErrorLogFormat</directive> yönergesi ile belirlenir. Bu yönergeyi
112       kullanarak günlüklenen değerleri özelleştirebilirsiniz. Bir biçem
113       belirtmezseniz öntanımlı biçem kullanılır. Örnek tipik bir hata iletisi
114       içermektedir:</p>
115
116     <example>
117     [Fri Sep 09 10:42:29.902022 2011] [core:error] [pid 35708:tid 4328636416]
118     [client 72.15.99.187] Dosya yok: /usr/local/apache2/htdocs/favicon.ico
119     </example>
120
121     <p>Günlük girdisinin ilk öğesi iletinin yazıldığı tarih ve saatten oluşur.
122       İkincisi iletiyi üreten modülün ismi (bu durumda: core) ile raporlanan
123       bilginin önem derecesini belirtir. Bunu varsa sürecin kimliği ve yine
124       varsa evre kimliği izler. Sonraki öğe hatanın üretilmesine sebep olan
125       istemcinin IP adresini içerir. Kalanı iletinin kendisidir (duruma
126       bakılırsa bir dosyaya yapılan istek yerine getirilememiş).</p>
127
128     <p>Hata günlüğünde görünebilecek ileti çeşitliliği oldukça fazladır. Çoğu
129       yukarıdaki örneğin benzeridir. Hata günlüğü ayrıca, CGI betiklerinin
130       hata ayıklama çıktılarını da içerir. Bir CGI betiği tarafından standart
131       hataya (<code>stderr</code>) yazılan her türlü bilgi doğrudan hata
132       günlüğüne kopyalanır.</p>
133
134     <p>Hata günlüğüne ve erişim günlüğüne  <code>%L</code> dizgeciği konularak
135       erişim günlüğündeki girdi ile hata günlüğündeki girdiyi ilişkilendirecek
136       bir günlük girdisi kimliği oluşturulabilir.
137       <module>mod_unique_id</module> yüklüyse günlük girdisi kimliği olarak
138       onun eşsiz istek kimliği de kullanılır.</p>
139
140     <p>Sunucuyu denerken olası sorunlara karşı hata günlüğünü sürekli
141       izlemelisiniz. Unix sistemlerinde bunu şöyle bir komutla
142       sağlayabilirsiniz:</p>
143
144     <example>
145       tail -f error_log
146     </example>
147   </section>
148
149   <section id="permodule">
150     <title>Modüllere göre günlükleme</title>
151
152     <p><directive module="core">LogLevel</directive> yönergesi, günlük
153       iletisinin üretilmesine sebep olan modüle bağlı bir önem seviyesi
154       belirleyebilmenizi sağlar. Bu yolla sorun yaşadığınız modülle ilgili
155       günlük musluklarını sonuna kadar açabiliri ek olarak ilgilendiğiniz diğer
156       modüllerle ilgili ayrıntıları da edinebilirsiniz. Özellikle
157       <module>mod_proxy</module> veya <module>mod_rewrite</module> gibi
158       modüllerde yapılmak isteneni denerken neler olup bittiğini ayrıntılarıyla
159       bilmek istediğiniz durumlarda kullanışlıdır.</p>
160
161     <p>Bunu <directive>LogLevel</directive> yönergesinde modülün ismini
162       belirterek yapabilirsiniz:</p>
163
164     <example>
165     LogLevel info rewrite:trace5
166     </example>
167
168     <p>Bu satırla ana <directive>LogLevel</directive> info'ya ayarlanırken
169       <module>mod_rewrite</module> için musluk <code>trace5</code> seviyesine
170       kadar açılmaktadır.</p>
171
172     <note>Bu yönerge, Apache HTTP Sunucusunun evvelki sürümlerinde mevcut olan
173       <code>RewriteLog</code> gibi günlükleme modüllerinin yerini almıştır.
174     </note>
175   </section>
176
177   <section id="accesslog">
178     <title>Erişim Günlüğü</title>
179
180     <related>
181       <modulelist>
182         <module>mod_log_config</module>
183         <module>mod_setenvif</module>
184       </modulelist>
185       <directivelist>
186         <directive module="mod_log_config">CustomLog</directive>
187         <directive module="mod_log_config">LogFormat</directive>
188         <directive module="mod_setenvif">SetEnvIf</directive>
189       </directivelist>
190     </related>
191
192     <p>Sunucu erişim günlüğü sunucu tarafından işleme alınan tüm istekleri
193       kaydeder. Erişim günlüğünün yeri ve içeriği  <directive
194       module="mod_log_config">CustomLog</directive> yönergesi ile belirlenir.
195       <directive module="mod_log_config">LogFormat</directive> yönergesi ile
196       günlük içeriğini kişiselleştirmek mümkündür. Bu bölümde sunucunun
197       bilgileri erişim günlüğüne kaydetmesi için nasıl yapılandırılacağından
198       bahsedilecektir.</p>
199
200     <p>Şüphesiz, bilginin erişim günlüğünde saklanması günlük yönetiminde ilk
201       adımı oluşturur.  Sonraki adım yararlı istatistikleri üretmek için bu
202       bilgiyi incelemektir. Günlük incelemesi bu belgenin kapsamına dahil
203       değildir ve aslında bu işlem sunucunun yaptığı işlerden biri değildir.
204       Bu konu ve günlük incelemesi yapan uygulamalar hakkında daha ayrıntılı
205       bilgi edinmek için <a
206       href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/"
207       >dmoz.org</a>
208       bakınız.</p>
209
210     <p>Apache httpd’nin çeşitli sürümlerinde erişim günlüklerini denetlemek
211       için kullanılan diğer modüller ve yönergeler arasında mod_log_referer,
212       mod_log_agent modülleri ve <code>TransferLog</code> yönergesi
213       sayılabilir. Artık, daha eski tüm diğer yönergelerin işlevselliklerini
214       bir araya toplayan <directive module="mod_log_config"
215       >CustomLog</directive> yönergesi kullanılmaktadır.</p>
216
217     <p>Erişim günlüğünün girdi biçemi kolayca isteğe göre
218       düzenlenebilmektedir. Biçemi belirtmekte kullanılan biçem dizgesi, C
219       tarzı printf(1) biçem dizgesini andırır. Sonraki bölümlerde bazı
220       örneklere yer verilmiştir. Biçem dizgesini oluşturan belirteçlerin tam
221       listesi için <module>mod_log_config</module> belgesinin <a
222       href="mod/mod_log_config.html#formats">Günlük Girdilerinin
223       Kişiselleştirilmesi</a> bölümüne bakınız.</p>
224
225     <section id="common">
226       <title>Ortak Günlük Biçemi (OGB)</title>
227
228       <p>Erişim günlüğü için sıklıkla kullanılan bir yapılandırma:</p>
229
230       <example>
231         LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
232         CustomLog logs/access_log common
233       </example>
234
235       <p>İlk satırda belli bir biçem dizgesi için <code>common</code> diye bir
236         <em>takma ad</em> tanımlanmaktadır. Biçem dizgesi, sunucuya hangi
237         belli bir bilgi parçalarını günlükleyeceğini söyleyen % imli biçem
238         belirteçlerinden oluşur. Biçem dizgesine ayrıca dizgesel sabitler de
239         yerleştirilebilir ve bunlar erişim günlüğüne oldukları gibi
240         kopyalanırlar. Biçem dizgesi içinde çift tırnak karakteri (") biçem
241         dizgesini vaktinden önce sonlandırmaması için ters bölü çizgisi ile
242         öncelenmelidir. Biçem dizgesi ayrıca, satır sonlarını belirtmek için
243         "<code>\n</code>" ve sekmeleri belirtmek için "<code>\t</code>"
244         denetim karakterlerini de içerebilir.</p>
245
246       <p><directive module="mod_log_config">CustomLog</directive> yönergesi
247         evvelce tanımlanmış bir <em>takma adı</em> kullanarak yeni bir günlük
248         dosyası tanımlar. Erişim günlüğünün dosya ismi bölü çizgisi ile
249         başlamadıkça dosya yolunun <directive module="core"
250         >ServerRoot</directive> değerine göreli olduğu varsayılır.</p>
251
252       <p>Yukarıdaki yapılandırma günlük dosyasına girdileri Ortak Günlük
253         Biçemi (Common Log Format) adı verilen standart biçemde yazar.
254         Bu standart biçem başka HTTP sunucuları tarafından da kullanılır ve
255         çoğu günlük inceleme yazılımı tarafından tanınır. Ortak Günlük
256         Biçeminde üretilen günlük girdileri şöyle görünür:</p>
257
258       <example>
259         127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
260         /apache_pb.gif HTTP/1.0" 200 2326
261       </example>
262
263       <p>Bu günlük girdisini parça parça açıklayalım:</p>
264
265       <dl>
266         <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
267
268         <dd>Bu, sunucuya istek yapan istemcinin (uzak konağın) IP adresidir.
269           Eğer <directive module="core">HostnameLookups</directive>
270           yönergesine <code>On</code> değeri atanmışsa sunucu bu IP adresi
271           için DNS sorgusu yapacak ve IP adresi yerine bulduğu konak ismini
272           yazmaya çalışacaktır. Bununla birlikte, bu işlem sunucuyu epeyce
273           yavaşlattığından önerilmemektedir. Konak isimlerini saptamak için en
274           iyisi günlük girdilerini <program>logresolve</program> gibi bir
275           günlük işlemcisinden geçirmektir. Burada raporlanan IP adresi
276           doğrudan istemcinin IP adresi olmayabilir. Eğer sunucu ile istemci
277           arasında bir vekil sunucu varsa bu IP adresi, vekil sunucunun IP
278           adresi olacaktır.</dd>
279
280         <dt><code>-</code> (<code>%l</code>)</dt>
281
282         <dd>Çıktıdaki bir "tire" imi istenen bilgi parçasının mevcut olmadığı
283           anlamına gelir. Bu durumda, mevcut olmayan bilgi istemci makine
284           üzerinde <code>identd</code> tarafından belirlenen istemcinin RFC
285           1413 kimliğidir. Bu bilgi oldukça güvenilmezdir ve sıkıca denetlenen
286           iç ağlar haricinde hemen hemen asla kullanılmamalıdır. Apache,
287           <directive module="mod_ident">IdentityCheck</directive> yönergesine
288           <code>On</code> değeri atanmış olmadıkça bu bilgiyi saptamaya
289           uğraşmaz.</dd>
290
291         <dt><code>frank</code> (<code>%u</code>)</dt>
292
293         <dd>Bu, belge isteğinde bulunan kişinin HTTP kimlik doğrulamasıyla
294           saptanan kullanıcı kimliğidir. Bu değer CGI betiklerine
295           <code>REMOTE_USER</code> ortam değişkeni ile sağlanır. Eğer istek
296           için durum kodu 401 ise (aşağıya bakınız) henüz kullanıcının kimliği
297           doğrulanmamış olacağından bu değere güvenilmemelidir. Eğer belge
298           parola korumalı değilse günlüğün bu kısmı da yukarıdaki gibi
299           "<code>-</code>" olacaktır.</dd>
300
301         <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
302         (<code>%t</code>)</dt>
303
304         <dd>İsteğin alındığı tarih ve saat. Biçemi şöyledir:
305
306           <p class="indent">
307             <code>[gün/ay/yıl:saat:dakika:saniye dilim]<br />
308              gün    = 2 hane<br />
309              ay     = 3 harf<br />
310              yıl    = 4 hane<br />
311              saat   = 2 hane<br />
312              dakika = 2 hane<br />
313              saniye = 2 hane<br />
314              dilim  = (`+' | `-') 4 hane</code>
315           </p>
316           <p>Günlük biçem dizgesinde zaman gösterim biçemini
317           <code>%{<em>biçem</em>}t</code> şeklinde belirtmek de mümkündür.
318           Buradaki <code><em>biçem</em></code> dizgesi, stardart C
319           kütüphanesindeki <code>strftime(3)</code> işlevi için tanımlanmış
320           biçem belirteçleriyle veya desteklenen özel belirteçlerle
321           oluşturulabilir. Ayrıntılı bilgi için <module>mod_log_config</module>
322           <a href="mod/mod_log_config.html#formats">biçem dizgelerine</a>
323           bakın.</p>
324         </dd>
325
326         <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
327         (<code>\"%r\"</code>)</dt>
328
329         <dd>İstemciden alınan istek satırının çift tırnaklar arasında
330           gösterilmesi istenmiştir. İstek satırı en yararlı bilgi parçalarını
331           içerir. Birincisi, istemci tarafından kullanılan yöntem
332           <code>GET</code>’miş. İkinci olarak istemci
333           <code>/apache_pb.gif</code> dosyasını istemiş ve üçüncü olarak
334           istemci <code>HTTP/1.0</code> protokolünü kullanmış. İstek satırının
335           bazı parçalarını bağımsız olarak da günlüklemek mümkündür. Örneğin,
336           "<code>%m %U%q %H</code>" dizgesi, yöntem, yol, sorgu dizgesi ve
337           protokolü kaydedecektir; bu dizge "<code>%r</code>" biçem
338           belirtecinin tek başına yaptığı işi yapar.</dd>
339
340         <dt><code>200</code> (<code>%&gt;s</code>)</dt>
341
342         <dd>Bu, sunucunun istemciye gönderdiği durum kodudur. İsteğin
343           başarıyla yerine getirilip getirilmediğini gösterdiği için bu bilgi
344           çok değerlidir. Durum kodu 2 ile başlıyorsa istek başarıyla yerine
345           getirilmiştir, 3 ile başlıyorsa yönlendirilmiştir, 4 ile başlıyorsa
346           istemci tarafında bir hata oluşmuştur, 5 ile başlıyorsa sunucuda bir
347           hata oluşmuştur. Olası hata kodlarının tam listesi <a
348           href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">RFC2616 Hiper
349           Metin Aktarım Protokolü</a>nün 10. bölümünde bulunabilir.</dd>
350
351         <dt><code>2326</code> (<code>%b</code>)</dt>
352
353         <dd>Son parça istemciye döndürülen nesnenin yanıt başlığı hariç
354           uzunluğudur. Eğer istemciye bir içerik döndürülmemişse bu değer
355           "<code>-</code>" olacaktır. Bunun yerine günlüğe "<code>0</code>"
356           yazdırmak için <code>%B</code> belirtecini kullanınız.</dd>
357       </dl>
358     </section>
359
360     <section id="combined">
361       <title>Birleşik Günlük Biçemi</title>
362
363       <p>Sıklıkla kullanılan diğer bir biçem dizgesi Birleşik Günlük Biçemi
364         (Combined Log Format) olup şöyle kullanılabilir:</p>
365
366       <example>
367         LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
368         \"%{User-agent}i\"" combined<br />
369          CustomLog log/access_log combined
370       </example>
371
372       <p>Bu biçem ilaveten 2 alan içermesi dışında Ortak Günlük Biçemi ile
373         aynıdır. İlave alanların ikisi de <code>%{<em>başlık</em>}i</code>
374         biçeminde olup buradaki <code><em>başlık</em></code>, HTTP isteğindeki
375         başlık alanlarından biridir. Bu biçemin kullanıldığı bir erişim
376         günlüğü girdisi şöyle olurdu:</p>
377
378       <example>
379         127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
380         /apache_pb.gif HTTP/1.0" 200 2326
381         "http://www.example.com/start.html" "Mozilla/4.08 [en]
382         (Win98; I ;Nav)"
383       </example>
384
385       <p>Ek alanlar:</p>
386
387       <dl>
388         <dt><code>"http://www.example.com/start.html"</code>
389         (<code>\"%{Referer}i\"</code>)</dt>
390
391         <dd>HTTP istek başlığı "Referer". İstemcinin raporladığı isteğin
392           kaynaklandığı URI. (Bu isteğin yapılmasını sağlayan bağlantıyı
393           içeren URL veya istek bir sayfanın bileşenleri ile ilgiliyse istenen
394           sayfanın URL’si olabilir.)</dd>
395
396         <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
397         (<code>\"%{User-agent}i\"</code>)</dt>
398
399         <dd>Tarayıcı kimliğini içeren HTTP istek başlığı. Bu istemcinin
400           tarayıcısının raporladığı kendi tanıtım bilgisidir.</dd>
401       </dl>
402     </section>
403
404     <section id="multiple">
405       <title>Çok Sayıda Erişim Günlüğü</title>
406
407       <p>Yapılandırma dosyasında çok sayıda <directive
408         module="mod_log_config">CustomLog</directive> yönergesi kullanarak çok
409         sayıda erişim günlüğü kolayca oluşturulabilir. Örneğin aşağıdaki
410         yönergelerle 3 tane erişim günlüğü oluşturulacaktır. İlki temel OGB
411         bilgisini içerirken diğer ikisi isteğin kaynaklandığı yeri ve tarayıcı
412         kimliğini içerir. Son iki <directive module="mod_log_config"
413         >CustomLog</directive> satırı ayrıca, <code>ReferLog</code> ve
414         <code>AgentLog</code> yönergelerinin etkilerinin nasıl taklit
415         edileceğini de göstermektedir.</p>
416
417       <example>
418         LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
419         CustomLog logs/access_log common<br />
420         CustomLog logs/referer_log "%{Referer}i -&gt; %U"<br />
421         CustomLog logs/agent_log "%{User-agent}i"
422       </example>
423
424       <p>Bu örnek ayrıca, <directive module="mod_log_config"
425         >LogFormat</directive> yönergesi ile bir takma ad tanımlamanın şart
426         olmadığını da göstermektedir. Günlük biçemi doğrudan <directive
427         module="mod_log_config">CustomLog</directive> yönergesinde
428         belirtilebilir.</p>
429     </section>
430
431     <section id="conditional">
432       <title>Şarta Bağlı Günlükler</title>
433
434       <p>Bazı durumlarda istemcinin yaptığı isteğe bağlı olarak erişim
435         günlüğünde belli girdilerin dışlanması gerekebilir. Bu, <a
436         href="env.html" >ortam değişkenleri</a> sayesinde kolayca yerine
437         getirilebilir. Önce isteğin belli koşulları sağladığını belirten bir
438         ortam değişkeni ataması yapılır. Bu işlem <directive
439         module="mod_setenvif">SetEnvIf</directive> yönergesi ile yapılır.
440         Sonra da, ortam değişkenine bağlı olarak isteklerin günlüğe dahil
441         edilip edilmeyeceği <directive
442         module="mod_log_config">CustomLog</directive> yönergesinin
443         <code>env=</code> deyimi kullanılarak belirtilir. Bazı örnekler:</p>
444
445       <example>
446         # yerel konaktan kaynaklanan istekleri imleyelim<br />
447         SetEnvIf Remote_Addr "127\.0\.0\.1" kaydetme<br />
448         # robots.txt dosyası isteklerini imleyelim<br />
449         SetEnvIf Request_URI "^/robots\.txt$" kaydetme<br />
450         # Kalanları günlüğe kaydedelim<br />
451         CustomLog logs/access_log common env=!kaydetme
452       </example>
453
454       <p>Başka bir örnek olarak, Türkçe belge isteklerini bir dosyaya diğer
455         dillerdeki istekleri başka bir dosyaya kaydedelim.</p>
456
457       <example>
458         SetEnvIf Accept-Language "tr" turkce<br />
459         CustomLog logs/turkce_log common env=turkce<br />
460         CustomLog logs/diger_diller_log common env=!turkce
461       </example>
462
463       <p>Bir arabellkleme senaryosuna arabelleğin verimli kullanılıp
464         kullanılmadığını bilmek isteyelim. Bu basitçe şöyle yapılabilir:</p>
465
466       <example>
467         SetEnv CACHE_MISS 1<br />
468         LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache<br />
469         CustomLog logs/access_log common-cache
470       </example>
471
472       <p><module>mod_cache</module> önce <module>mod_env</module> modülünü
473         çalıştıracak ve başarılı olunduğu takdirde içeriği onsuz teslim
474         edecektir. Bu durumda arabellek kaybı <code>1</code> olarak
475         günlüklenirken arabellek sunumu <code>-</code> olarak
476         günlüklenecektir.</p>
477
478       <p><code>env=</code> sözdizimine ek olarak, <directive
479         module="mod_log_config">LogFormat</directive> HTTP yanıt kodudaki koşul
480         değerlerini günlüklemeyi de destekler:</p>
481
482       <example>
483       LogFormat "%400,501{User-agent}i" browserlog<br />
484       LogFormat "%!200,304,302{Referer}i" refererlog
485       </example>
486
487       <p>Bu örnekte, HTTP durum kodu 400 veya 501 ise <code>User-agent</code>
488         başlığı günlüklenecektir. Aksi takdirde, günlüğe bir "-" yazılacaktır.
489         Benzer şekilde ikinci örnekte, HTTP durum kodu 200, 204 veya 302
490         <strong>değilse</strong> (durum kodlarının öncesindeki "!" imine
491         dikkat) <code>Referer</code> başlığı günlüklenecektir.</p>
492
493       <p>Koşulaa bağlı günlük kaydının çok esnek ve güçlü olabileceğini
494         göstermiş olsak da günlük içeriğini denetlemenin tek yolu bu değildir.
495         Günlük dosyaları sunucu etkinliğini eksiksiz olarak kaydedebildikleri
496         takdirde daha yararlı olurlar. Günlük dosyalarını sonradan işleme tabi
497         tutarak istenmeyen girdileri kaldırılmış bir kopya almak hem kolay hem
498         de daha yararlıdır.</p>
499     </section>
500   </section>
501
502   <section id="rotation">
503     <title>Günlük Çevrimi</title>
504
505     <p>Yükü ağır sunucularda günlük dosyalarına kaydedilen bilginin miktarı
506       çok büyük boyutlara ulaşabilir. 10.000 istek içeren bir erişim günlüğü
507       yaklaşık 1MB yer kaplar. Etkin günlük dosyasını belirli aralıklarla
508       değiştirmek veya silmek gerekebilir. Apache httpd çalışırken dosyayı sürekli
509       açık tuttuğu ve yazdığı için bu işlem sunucu çalışırken yapılamaz. Bu
510       bakımdan, günlük dosyası değiştirildikten veya silindikten sonra yeni
511       dosyanın açılması için <a href="stopping.html">sunucunun yeniden
512       başlatılması</a> gerekir.</p>
513
514     <p><a href="stopping.html#graceful">Nazikçe yeniden başlatmak</a>
515       suretiyle sunucunun, mevcut ve bekleyen bağlantıları kaybetmeden yeni
516       günlük dosyalarını açması sağlanabilir. Bununla birlikte, bu işlem
517       sırasında sunucunun eski isteklere sunumu bitirene kadar eski günlük
518       dosyalarına yazmaya devam edebilmesi gerekir. Bu bakımdan, yeniden
519       başlatmanın ardından eski günlük dosyaları üzerinde bir işlem yapmadan
520       önce biraz beklemek gerekir. Günlük dosyalarını döndürürken kullanılan
521       senaryolarda genellikle eski günlük dosyaları yer kazanmak için
522       sıkıştırılırlar:</p>
523
524     <example>
525       mv access_log access_log.old<br />
526       mv error_log error_log.old<br />
527       apachectl graceful<br />
528       sleep 600<br />
529       gzip access_log.old error_log.old
530     </example>
531
532     <p>Günlük çevrimi yapmanın başka bir yolu da sonraki bölümde açıklandığı
533       gibi <a href="#piped">borulu günlükler</a> kullanmaktır.</p>
534   </section>
535
536   <section id="piped">
537     <title>Borulu Günlükler</title>
538
539     <p>Apache httpd hata ve erişim günlüklerini doğrudan bir dosyaya yazmak
540       yerine bir boru üzerinden başka bir sürece yazabilir. Bu yetenek ana
541       sunucuya herhangi bir kod eklemeksizin günlükleme esnekliğini şaşırtıcı
542       derecede arttırır. Günlükler boruya yazılmak istenirse dosya ismini boru
543       karakteriyle ("<code>|</code>") değiştirip ardına günlük girdilerini
544       standart girdisinden kabul edecek programın ismini eklemek yeterlidir.
545       Apache httpd başlatıldığı zaman borulu günlük işlemini de
546       başlatacaktır. Eğer sunucu çalışırken günlükleri kabul eden süreç
547       çökerse Apache httpd bu programı yeniden başlatır. (Bu son özelliği
548       sebebiyle bu tekniğe “güvenilir borulu günlükleme” adını veriyoruz.)</p>
549
550     <p>Borulu günlük süreçleri ana Apache httpd süreci tarafından başlatılır
551       ve bu süreçler ana Apache httpd sürecinin kullanıcı kimliğini miras
552       alırlar. Yani borulu günlükleme programları aslında root tarafından
553       çalıştırılmış gibi olur. Bu bakımdan, bu programları basit ve güvenilir
554       kılmak çok önemlidir.</p>
555
556     <p>Borulu günlüklerin önemli kullanım alanlarından biri de sunucuyu
557       yeniden başlatmak gerekmeksizin günlük çevrimini mümkün kılmaktır.
558       Apache HTTP sunucusu bu amaçla kullanılmak üzere
559       <program>rotatelogs</program> diye bir program içerir. Örneğin,
560       günlükleri 24 saatte bir döndürmek isterseniz bunu şöyle
561       yapabilirsiniz:</p>
562
563     <example>
564       CustomLog "|/usr/local/apache/bin/rotatelogs
565       /var/log/access_log 86400" common
566     </example>
567
568     <p>Borunun diğer ucundaki süreci başlatacak komutun tırnak içine
569       alındığına dikkat ediniz. Bu örnekler erişim günlüğü için verilmişse de
570       aynı teknik hata günlüğü için de kullanılabilir.</p>
571
572     <p>Hariçten bir uygulama olarak <a
573       href="http://www.cronolog.org/">cronolog</a> isminde buna benzer ancak
574       çok daha esnek bir program daha vardır.</p>
575
576     <p>Borulu günlükler de şarta bağlı günlükleme kadar güçlü olmakla beraber
577       çevrimdışı ardıl işlemler gibi daha basit çözümler için
578       kullanılmamalıdır.</p>
579
580     <p>Öntanımlı olarak borulu günlük süreci bir kabuk kullanmadan
581       çalıştırılır. Kabuk kullanarak (genelde <code>/bin/sh -c</code> ile)
582       yapılmak istenirse "<code>|</code>" yerine "<code>|$</code>"
583       kullanılır:</p>
584
585     <example>
586       # Kabu kullanarak "rotatelogs" çalıştırmak<br />
587       CustomLog "|$/usr/local/apache/bin/rotatelogs
588       /var/log/access_log 86400" common
589     </example>
590
591     <p>Bu, Apache 2.2 için öntanımlı davranıştı. Kabuk özelliklerine bağlı
592       olarak, yeniden başlatma sırasındaki sinyal işleme sorunları ve günlük
593       borulama uygulamasının yaşam süresi için ek bir kabuk süreci ile
594       sonuçlanabilir. Apache 2.2 ile uyumluluk açısından "<code>||</code>"
595       gösterimi de desteklenmekte olup "<code>|</code>" kullanımına
596       eşdeğerdir.</p>
597
598   </section>
599
600   <section id="virtualhost">
601     <title>Sanal Konaklar</title>
602
603     <p>Bir sunucu çok sayıda <a href="vhosts/">sanal konak</a> ile hizmet
604       sunarken bunların günlük kayıtları için çeşitli seçenekler mevcuttur.
605       İlk seçenekte, sanki sunucu tek bir konakla hizmet sunuyormuş gibi
606       günlük kaydı yapılır. Günlükleme yönergelerini <directive module="core"
607       type="section">VirtualHost</directive> bölümlerinin dışına, ana sunucu
608       bağlamına yerleştirerek tüm isteklerin aynı erişim ve hata günlüğüne
609       yazılmasını sağlamak olasıdır. Bu teknik, tek tek sanal konaklar için
610       kolayca istatistik toplamaya izin vermez.</p>
611
612     <p>Eğer  <directive module="mod_log_config">CustomLog</directive>
613       veya <directive module="core">ErrorLog</directive> yönergesi bir
614       <directive module="core" type="section">VirtualHost</directive> bölümüne
615       yerleştirilirse bu sanal konağa bütün erişimler veya hatalar belirtilen
616       dosyaya günlüklenecektir. Böyle günlükleme yönergeleri içermeyen sanal
617       konakların günlükleri hala ana sunucunun hata ve erişim günlüklerine
618       yazılmaya devam edecektir. Bu teknik az sayıda sanal konak barındıran
619       sunucular için çok kullanışlıdır. Fakat sanal konak sayısı çok fazlaysa
620       bu teknikle günlük dosyalarını yönetmek çok karmaşık bir hal alabilir.
621       Ayrıca, <a href="vhosts/fd-limits.html">yetersiz dosya tanıtıcısı</a>
622       sorunlarıyla çok sık karşılaşılabilir.</p>
623
624     <p>Erişim günlükleri için çok az bir fedakarlıkla çok iyi bir çözüm vardır.
625       Günlük biçemine sanal konaklarla ilgili bilgi eklemek suretiyle tüm
626       konakların aynı günlük dosyasını kullanmaları olasıdır. Böylece günlük
627       dosyası sonradan her sanal konak için ayrı bir dosya oluşturmak üzere
628       ayrıştırılabilir. Örneğin, bu işlem için şu yönergeler kullanılıyor
629       olsun:</p>
630
631     <example>
632       LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
633       ortaksankon<br />
634       CustomLog logs/access_log ortaksankon
635     </example>
636
637     <p><code>%v</code> belirteci isteği sunan sanal konağın ismini günlüğe
638       yazmak için kullanılır. Daha sonra <a
639       href="programs/other.html">split-logfile</a> gibi bir program
640       kullanarak, bu dosyadan her sanal konak için ayrı birer dosya elde
641       edilebilir.</p>
642   </section>
643
644   <section id="other">
645     <title>Diğer Günlük Dosyaları</title>
646
647     <related>
648       <modulelist>
649         <module>mod_logio</module>
650         <module>mod_log_config</module>
651         <module>mod_log_forensic</module>
652         <module>mod_cgi</module>
653       </modulelist>
654
655       <directivelist>
656         <directive module="mod_log_config">LogFormat</directive>
657         <directive module="mod_log_config">BufferedLogs</directive>
658         <directive module="mod_log_forensic">ForensicLog</directive>
659         <directive module="mpm_common">PidFile</directive>
660         <directive module="mod_cgi">ScriptLog</directive>
661         <directive module="mod_cgi">ScriptLogBuffer</directive>
662         <directive module="mod_cgi">ScriptLogLength</directive>
663       </directivelist>
664     </related>
665
666     <section>
667       <title>Gönderilen ve alınan bayt sayısının günlüklenmesi</title>
668
669       <p><module>mod_logio</module> modülü <directive
670         module="mod_log_config">LogFormat</directive> yönergesinde kullanılan
671         biçem belirteçlerine alınan ve gönderilen bayt sayıları için iki
672         belirteç (%I ve %O) ekler.</p>
673     </section>
674
675     <section>
676       <title>Adli Günlük</title>
677
678       <p><module>mod_log_forensic</module> modülü istemci isteklerinin kanıt
679         olarak kullanılmak amacıyla günlüklenmesini sağlar. Günlükleme her
680         istek için isteğe hizmet sunmadan önce ve sonra olmak üzere iki defa
681         yapılır. Böylece günlük dosyasında başarılı her istek için iki satır
682         bulunur. Adli günlükleme çok sıkı kurallara tabi olup
683         kişiselleştirilemez. Güvenlik ve hata ayıklama aracı olarak yararlı
684         değildir.</p>
685     </section>
686
687     <section id="pidfile">
688       <title>PID Dosyası</title>
689
690       <p>Apache httpd başlatıldığında, ana httpd sürecinin kimliği (PID)
691         <code>logs/httpd.pid</code> dosyasına kaydedilir. Bu dosyanın ismi
692         <directive module="mpm_common">PidFile</directive> yönergesi ile
693         değiştirilebilir. Bu süreç kimliği sistem yöneticisi tarafından ana
694         sürece sinyal göndererek artalan sürecini sonlandırmak veya yeniden
695         başlatmak için kullanılır. Windows üzerinde bu işlem için
696         <code>-k</code> komut satırı seçeneği kullanılır. Bu konuda daha
697         ayrıntılı bilgi edinmek için <a href="stopping.html">Durdurma ve
698         Yeniden Başlatma</a> belgesine bakınız.</p>
699     </section>
700
701     <section id="scriptlog">
702       <title>Betik Günlüğü</title>
703
704       <p><directive module="mod_cgi">ScriptLog</directive> yönergesi CGI
705         betiklerinin girdi ve çıktılarını kaydetmenizi mümkün kılmak suretiyle
706         hata ayıklamaya yardımcı olur. Bu sadece deneysel amaçla kullanılmalı,
707         asıl sunucuya uygulanmamalıdır. <a href="mod/mod_cgi.html">mod_cgi</a>
708         belgesinde daha fazla bilgi bulunabilir.</p>
709     </section>
710   </section>
711 </manualpage>