]> granicus.if.org Git - apache/blob - docs/manual/logs.xml.tr
Remove useless <br \> in highlight blocks.
[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: 1657858:1739105 (outdated) -->
5 <!-- =====================================================
6  Translated by: Nilgün Belma Bugüner <nilgun belgeler.gen.tr>
7    Reviewed by: Orhan Berent <berent belgeler.gen.tr>
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     <highlight language="config">
165 LogLevel info rewrite:trace5
166     </highlight>
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> bakınız.</p>
208
209     <p>Apache httpd’nin çeşitli sürümlerinde erişim günlüklerini denetlemek
210       için kullanılan diğer modüller ve yönergeler arasında mod_log_referer,
211       mod_log_agent modülleri ve <code>TransferLog</code> yönergesi
212       sayılabilir. Artık, daha eski tüm diğer yönergelerin işlevselliklerini
213       bir araya toplayan <directive module="mod_log_config"
214       >CustomLog</directive> yönergesi kullanılmaktadır.</p>
215
216     <p>Erişim günlüğünün girdi biçemi kolayca isteğe göre
217       düzenlenebilmektedir. Biçemi belirtmekte kullanılan biçem dizgesi, C
218       tarzı printf(1) biçem dizgesini andırır. Sonraki bölümlerde bazı
219       örneklere yer verilmiştir. Biçem dizgesini oluşturan belirteçlerin tam
220       listesi için <module>mod_log_config</module> belgesinin <a
221       href="mod/mod_log_config.html#formats">Günlük Girdilerinin
222       Kişiselleştirilmesi</a> bölümüne bakınız.</p>
223
224     <section id="common">
225       <title>Ortak Günlük Biçemi (OGB)</title>
226
227       <p>Erişim günlüğü için sıklıkla kullanılan bir yapılandırma:</p>
228
229       <highlight language="config">
230 LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common
231 CustomLog logs/access_log common
232       </highlight>
233
234       <p>İlk satırda belli bir biçem dizgesi için <code>common</code> diye bir
235         <em>takma ad</em> tanımlanmaktadır. Biçem dizgesi, sunucuya hangi
236         belli bir bilgi parçalarını günlükleyeceğini söyleyen % imli biçem
237         belirteçlerinden oluşur. Biçem dizgesine ayrıca dizgesel sabitler de
238         yerleştirilebilir ve bunlar erişim günlüğüne oldukları gibi
239         kopyalanırlar. Biçem dizgesi içinde çift tırnak karakteri (") biçem
240         dizgesini vaktinden önce sonlandırmaması için ters bölü çizgisi ile
241         öncelenmelidir. Biçem dizgesi ayrıca, satır sonlarını belirtmek için
242         "<code>\n</code>" ve sekmeleri belirtmek için "<code>\t</code>"
243         denetim karakterlerini de içerebilir.</p>
244
245       <p><directive module="mod_log_config">CustomLog</directive> yönergesi
246         evvelce tanımlanmış bir <em>takma adı</em> kullanarak yeni bir günlük
247         dosyası tanımlar. Erişim günlüğünün dosya ismi bölü çizgisi ile
248         başlamadıkça dosya yolunun <directive module="core"
249         >ServerRoot</directive> değerine göreli olduğu varsayılır.</p>
250
251       <p>Yukarıdaki yapılandırma günlük dosyasına girdileri Ortak Günlük
252         Biçemi (Common Log Format) adı verilen standart biçemde yazar.
253         Bu standart biçem başka HTTP sunucuları tarafından da kullanılır ve
254         çoğu günlük inceleme yazılımı tarafından tanınır. Ortak Günlük
255         Biçeminde üretilen günlük girdileri şöyle görünür:</p>
256
257       <example>
258         127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
259         /apache_pb.gif HTTP/1.0" 200 2326
260       </example>
261
262       <p>Bu günlük girdisini parça parça açıklayalım:</p>
263
264       <dl>
265         <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
266
267         <dd>Bu, sunucuya istek yapan istemcinin (uzak konağın) IP adresidir.
268           Eğer <directive module="core">HostnameLookups</directive>
269           yönergesine <code>On</code> değeri atanmışsa sunucu bu IP adresi
270           için DNS sorgusu yapacak ve IP adresi yerine bulduğu konak ismini
271           yazmaya çalışacaktır. Bununla birlikte, bu işlem sunucuyu epeyce
272           yavaşlattığından önerilmemektedir. Konak isimlerini saptamak için en
273           iyisi günlük girdilerini <program>logresolve</program> gibi bir
274           günlük işlemcisinden geçirmektir. Burada raporlanan IP adresi
275           doğrudan istemcinin IP adresi olmayabilir. Eğer sunucu ile istemci
276           arasında bir vekil sunucu varsa bu IP adresi, vekil sunucunun IP
277           adresi olacaktır.</dd>
278
279         <dt><code>-</code> (<code>%l</code>)</dt>
280
281         <dd>Çıktıdaki bir "tire" imi istenen bilgi parçasının mevcut olmadığı
282           anlamına gelir. Bu durumda, mevcut olmayan bilgi istemci makine
283           üzerinde <code>identd</code> tarafından belirlenen istemcinin RFC
284           1413 kimliğidir. Bu bilgi oldukça güvenilmezdir ve sıkıca denetlenen
285           iç ağlar haricinde hemen hemen asla kullanılmamalıdır. Apache,
286           <directive module="mod_ident">IdentityCheck</directive> yönergesine
287           <code>On</code> değeri atanmış olmadıkça bu bilgiyi saptamaya
288           uğraşmaz.</dd>
289
290         <dt><code>frank</code> (<code>%u</code>)</dt>
291
292         <dd>Bu, belge isteğinde bulunan kişinin HTTP kimlik doğrulamasıyla
293           saptanan kullanıcı kimliğidir. Bu değer CGI betiklerine
294           <code>REMOTE_USER</code> ortam değişkeni ile sağlanır. Eğer istek
295           için durum kodu 401 ise (aşağıya bakınız) henüz kullanıcının kimliği
296           doğrulanmamış olacağından bu değere güvenilmemelidir. Eğer belge
297           parola korumalı değilse günlüğün bu kısmı da yukarıdaki gibi
298           "<code>-</code>" olacaktır.</dd>
299
300         <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
301         (<code>%t</code>)</dt>
302
303         <dd>İsteğin alındığı tarih ve saat. Biçemi şöyledir:
304
305           <p class="indent">
306             <code>[gün/ay/yıl:saat:dakika:saniye dilim]<br />
307              gün    = 2 hane<br />
308              ay     = 3 harf<br />
309              yıl    = 4 hane<br />
310              saat   = 2 hane<br />
311              dakika = 2 hane<br />
312              saniye = 2 hane<br />
313              dilim  = (`+' | `-') 4 hane</code>
314           </p>
315           <p>Günlük biçem dizgesinde zaman gösterim biçemini
316           <code>%{<em>biçem</em>}t</code> şeklinde belirtmek de mümkündür.
317           Buradaki <code><em>biçem</em></code> dizgesi, stardart C
318           kütüphanesindeki <code>strftime(3)</code> işlevi için tanımlanmış
319           biçem belirteçleriyle veya desteklenen özel belirteçlerle
320           oluşturulabilir. Ayrıntılı bilgi için <module>mod_log_config</module>
321           <a href="mod/mod_log_config.html#formats">biçem dizgelerine</a>
322           bakın.</p>
323         </dd>
324
325         <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
326         (<code>\"%r\"</code>)</dt>
327
328         <dd>İstemciden alınan istek satırının çift tırnaklar arasında
329           gösterilmesi istenmiştir. İstek satırı en yararlı bilgi parçalarını
330           içerir. Birincisi, istemci tarafından kullanılan yöntem
331           <code>GET</code>’miş. İkinci olarak istemci
332           <code>/apache_pb.gif</code> dosyasını istemiş ve üçüncü olarak
333           istemci <code>HTTP/1.0</code> protokolünü kullanmış. İstek satırının
334           bazı parçalarını bağımsız olarak da günlüklemek mümkündür. Örneğin,
335           "<code>%m %U%q %H</code>" dizgesi, yöntem, yol, sorgu dizgesi ve
336           protokolü kaydedecektir; bu dizge "<code>%r</code>" biçem
337           belirtecinin tek başına yaptığı işi yapar.</dd>
338
339         <dt><code>200</code> (<code>%&gt;s</code>)</dt>
340
341         <dd>Bu, sunucunun istemciye gönderdiği durum kodudur. İsteğin
342           başarıyla yerine getirilip getirilmediğini gösterdiği için bu bilgi
343           çok değerlidir. Durum kodu 2 ile başlıyorsa istek başarıyla yerine
344           getirilmiştir, 3 ile başlıyorsa yönlendirilmiştir, 4 ile başlıyorsa
345           istemci tarafında bir hata oluşmuştur, 5 ile başlıyorsa sunucuda bir
346           hata oluşmuştur. Olası hata kodlarının tam listesi <a
347           href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">RFC2616 Hiper
348           Metin Aktarım Protokolü</a>nün 10. bölümünde bulunabilir.</dd>
349
350         <dt><code>2326</code> (<code>%b</code>)</dt>
351
352         <dd>Son parça istemciye döndürülen nesnenin yanıt başlığı hariç
353           uzunluğudur. Eğer istemciye bir içerik döndürülmemişse bu değer
354           "<code>-</code>" olacaktır. Bunun yerine günlüğe "<code>0</code>"
355           yazdırmak için <code>%B</code> belirtecini kullanınız.</dd>
356       </dl>
357     </section>
358
359     <section id="combined">
360       <title>Birleşik Günlük Biçemi</title>
361
362       <p>Sıklıkla kullanılan diğer bir biçem dizgesi Birleşik Günlük Biçemi
363         (Combined Log Format) olup şöyle kullanılabilir:</p>
364
365       <highlight language="config">
366 LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
367 CustomLog log/access_log combined
368       </highlight>
369
370       <p>Bu biçem ilaveten 2 alan içermesi dışında Ortak Günlük Biçemi ile
371         aynıdır. İlave alanların ikisi de <code>%{<em>başlık</em>}i</code>
372         biçeminde olup buradaki <code><em>başlık</em></code>, HTTP isteğindeki
373         başlık alanlarından biridir. Bu biçemin kullanıldığı bir erişim
374         günlüğü girdisi şöyle olurdu:</p>
375
376       <example>
377         127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
378         /apache_pb.gif HTTP/1.0" 200 2326
379         "http://www.example.com/start.html" "Mozilla/4.08 [en]
380         (Win98; I ;Nav)"
381       </example>
382
383       <p>Ek alanlar:</p>
384
385       <dl>
386         <dt><code>"http://www.example.com/start.html"</code>
387         (<code>\"%{Referer}i\"</code>)</dt>
388
389         <dd>HTTP istek başlığı "Referer". İstemcinin raporladığı isteğin
390           kaynaklandığı URI. (Bu isteğin yapılmasını sağlayan bağlantıyı
391           içeren URL veya istek bir sayfanın bileşenleri ile ilgiliyse istenen
392           sayfanın URL’si olabilir.)</dd>
393
394         <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
395         (<code>\"%{User-agent}i\"</code>)</dt>
396
397         <dd>Tarayıcı kimliğini içeren HTTP istek başlığı. Bu istemcinin
398           tarayıcısının raporladığı kendi tanıtım bilgisidir.</dd>
399       </dl>
400     </section>
401
402     <section id="multiple">
403       <title>Çok Sayıda Erişim Günlüğü</title>
404
405       <p>Yapılandırma dosyasında çok sayıda <directive
406         module="mod_log_config">CustomLog</directive> yönergesi kullanarak çok
407         sayıda erişim günlüğü kolayca oluşturulabilir. Örneğin aşağıdaki
408         yönergelerle 3 tane erişim günlüğü oluşturulacaktır. İlki temel OGB
409         bilgisini içerirken diğer ikisi isteğin kaynaklandığı yeri ve tarayıcı
410         kimliğini içerir. Son iki <directive module="mod_log_config"
411         >CustomLog</directive> satırı ayrıca, <code>ReferLog</code> ve
412         <code>AgentLog</code> yönergelerinin etkilerinin nasıl taklit
413         edileceğini de göstermektedir.</p>
414
415       <highlight language="config">
416 LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common
417 CustomLog logs/access_log common
418 CustomLog logs/referer_log "%{Referer}i -&gt; %U"
419 CustomLog logs/agent_log "%{User-agent}i"
420       </highlight>
421
422       <p>Bu örnek ayrıca, <directive module="mod_log_config"
423         >LogFormat</directive> yönergesi ile bir takma ad tanımlamanın şart
424         olmadığını da göstermektedir. Günlük biçemi doğrudan <directive
425         module="mod_log_config">CustomLog</directive> yönergesinde
426         belirtilebilir.</p>
427     </section>
428
429     <section id="conditional">
430       <title>Şarta Bağlı Günlükler</title>
431
432       <p>Bazı durumlarda istemcinin yaptığı isteğe bağlı olarak erişim
433         günlüğünde belli girdilerin dışlanması gerekebilir. Bu, <a
434         href="env.html" >ortam değişkenleri</a> sayesinde kolayca yerine
435         getirilebilir. Önce isteğin belli koşulları sağladığını belirten bir
436         ortam değişkeni ataması yapılır. Bu işlem <directive
437         module="mod_setenvif">SetEnvIf</directive> yönergesi ile yapılır.
438         Sonra da, ortam değişkenine bağlı olarak isteklerin günlüğe dahil
439         edilip edilmeyeceği <directive
440         module="mod_log_config">CustomLog</directive> yönergesinin
441         <code>env=</code> deyimi kullanılarak belirtilir. Bazı örnekler:</p>
442
443       <highlight language="config">
444 # yerel konaktan kaynaklanan istekleri imleyelim
445 SetEnvIf Remote_Addr "127\.0\.0\.1" kaydetme
446 # robots.txt dosyası isteklerini imleyelim
447 SetEnvIf Request_URI "^/robots\.txt$" kaydetme
448 # Kalanları günlüğe kaydedelim
449 CustomLog logs/access_log common env=!kaydetme
450       </highlight>
451
452       <p>Başka bir örnek olarak, Türkçe belge isteklerini bir dosyaya diğer
453         dillerdeki istekleri başka bir dosyaya kaydedelim.</p>
454
455       <highlight language="config">
456 SetEnvIf Accept-Language "tr" turkce
457 CustomLog logs/turkce_log common env=turkce
458 CustomLog logs/diger_diller_log common env=!turkce
459       </highlight>
460
461       <p>Bir arabellekleme senaryosuna arabelleğin verimli kullanılıp
462         kullanılmadığını bilmek isteyelim. Bu basitçe şöyle yapılabilir:</p>
463
464       <highlight language="config">
465 SetEnv CACHE_MISS 1
466 LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache
467 CustomLog logs/access_log common-cache
468       </highlight>
469
470       <p><module>mod_cache</module> önce <module>mod_env</module> modülünü
471         çalıştıracak ve başarılı olunduğu takdirde içeriği onsuz teslim
472         edecektir. Bu durumda arabellek kaybı <code>1</code> olarak
473         günlüklenirken arabellek sunumu <code>-</code> olarak
474         günlüklenecektir.</p>
475
476       <p><code>env=</code> sözdizimine ek olarak, <directive
477         module="mod_log_config">LogFormat</directive> HTTP yanıt kodudaki koşul
478         değerlerini günlüklemeyi de destekler:</p>
479
480       <highlight language="config">
481 LogFormat "%400,501{User-agent}i" browserlog
482 LogFormat "%!200,304,302{Referer}i" refererlog
483       </highlight>
484
485       <p>Bu örnekte, HTTP durum kodu 400 veya 501 ise <code>User-agent</code>
486         başlığı günlüklenecektir. Aksi takdirde, günlüğe bir "-" yazılacaktır.
487         Benzer şekilde ikinci örnekte, HTTP durum kodu 200, 204 veya 302
488         <strong>değilse</strong> (durum kodlarının öncesindeki "!" imine
489         dikkat) <code>Referer</code> başlığı günlüklenecektir.</p>
490
491       <p>Koşulaa bağlı günlük kaydının çok esnek ve güçlü olabileceğini
492         göstermiş olsak da günlük içeriğini denetlemenin tek yolu bu değildir.
493         Günlük dosyaları sunucu etkinliğini eksiksiz olarak kaydedebildikleri
494         takdirde daha yararlı olurlar. Günlük dosyalarını sonradan işleme tabi
495         tutarak istenmeyen girdileri kaldırılmış bir kopya almak hem kolay hem
496         de daha yararlıdır.</p>
497     </section>
498   </section>
499
500   <section id="rotation">
501     <title>Günlük Çevrimi</title>
502
503     <p>Yükü ağır sunucularda günlük dosyalarına kaydedilen bilginin miktarı
504       çok büyük boyutlara ulaşabilir. 10.000 istek içeren bir erişim günlüğü
505       yaklaşık 1MB yer kaplar. Etkin günlük dosyasını belirli aralıklarla
506       değiştirmek veya silmek gerekebilir. Apache httpd çalışırken dosyayı sürekli
507       açık tuttuğu ve yazdığı için bu işlem sunucu çalışırken yapılamaz. Bu
508       bakımdan, günlük dosyası değiştirildikten veya silindikten sonra yeni
509       dosyanın açılması için <a href="stopping.html">sunucunun yeniden
510       başlatılması</a> gerekir.</p>
511
512     <p><a href="stopping.html#graceful">Nazikçe yeniden başlatmak</a>
513       suretiyle sunucunun, mevcut ve bekleyen bağlantıları kaybetmeden yeni
514       günlük dosyalarını açması sağlanabilir. Bununla birlikte, bu işlem
515       sırasında sunucunun eski isteklere sunumu bitirene kadar eski günlük
516       dosyalarına yazmaya devam edebilmesi gerekir. Bu bakımdan, yeniden
517       başlatmanın ardından eski günlük dosyaları üzerinde bir işlem yapmadan
518       önce biraz beklemek gerekir. Günlük dosyalarını döndürürken kullanılan
519       senaryolarda genellikle eski günlük dosyaları yer kazanmak için
520       sıkıştırılırlar:</p>
521
522     <example>
523       mv access_log access_log.old<br />
524       mv error_log error_log.old<br />
525       apachectl graceful<br />
526       sleep 600<br />
527       gzip access_log.old error_log.old
528     </example>
529
530     <p>Günlük çevrimi yapmanın başka bir yolu da sonraki bölümde açıklandığı
531       gibi <a href="#piped">borulu günlükler</a> kullanmaktır.</p>
532   </section>
533
534   <section id="piped">
535     <title>Borulu Günlükler</title>
536
537     <p>Apache httpd hata ve erişim günlüklerini doğrudan bir dosyaya yazmak
538       yerine bir boru üzerinden başka bir sürece yazabilir. Bu yetenek ana
539       sunucuya herhangi bir kod eklemeksizin günlükleme esnekliğini şaşırtıcı
540       derecede arttırır. Günlükler boruya yazılmak istenirse dosya ismini boru
541       karakteriyle ("<code>|</code>") değiştirip ardına günlük girdilerini
542       standart girdisinden kabul edecek programın ismini eklemek yeterlidir.
543       Apache httpd başlatıldığı zaman borulu günlük işlemini de
544       başlatacaktır. Eğer sunucu çalışırken günlükleri kabul eden süreç
545       çökerse Apache httpd bu programı yeniden başlatır. (Bu son özelliği
546       sebebiyle bu tekniğe “güvenilir borulu günlükleme” adını veriyoruz.)</p>
547
548     <p>Borulu günlük süreçleri ana Apache httpd süreci tarafından başlatılır
549       ve bu süreçler ana Apache httpd sürecinin kullanıcı kimliğini miras
550       alırlar. Yani borulu günlükleme programları aslında root tarafından
551       çalıştırılmış gibi olur. Bu bakımdan, bu programları basit ve güvenilir
552       kılmak çok önemlidir.</p>
553
554     <p>Borulu günlüklerin önemli kullanım alanlarından biri de sunucuyu
555       yeniden başlatmak gerekmeksizin günlük çevrimini mümkün kılmaktır.
556       Apache HTTP sunucusu bu amaçla kullanılmak üzere
557       <program>rotatelogs</program> diye bir program içerir. Örneğin,
558       günlükleri 24 saatte bir döndürmek isterseniz bunu şöyle
559       yapabilirsiniz:</p>
560
561     <highlight language="config">
562 CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
563     </highlight>
564
565     <p>Borunun diğer ucundaki süreci başlatacak komutun tırnak içine
566       alındığına dikkat ediniz. Bu örnekler erişim günlüğü için verilmişse de
567       aynı teknik hata günlüğü için de kullanılabilir.</p>
568
569     <p>Hariçten bir uygulama olarak <a
570       href="http://www.cronolog.org/">cronolog</a> isminde buna benzer ancak
571       çok daha esnek bir program daha vardır.</p>
572
573     <p>Borulu günlükler de şarta bağlı günlükleme kadar güçlü olmakla beraber
574       çevrimdışı ardıl işlemler gibi daha basit çözümler için
575       kullanılmamalıdır.</p>
576
577     <p>Öntanımlı olarak borulu günlük süreci bir kabuk kullanmadan
578       çalıştırılır. Kabuk kullanarak (genelde <code>/bin/sh -c</code> ile)
579       yapılmak istenirse "<code>|</code>" yerine "<code>|$</code>"
580       kullanılır:</p>
581
582     <highlight language="config">
583 # Kabuk kullanarak "rotatelogs" çalıştırmak
584 CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
585     </highlight>
586
587     <p>Bu, Apache 2.2 için öntanımlı davranıştı. Kabuk özelliklerine bağlı
588       olarak, yeniden başlatma sırasındaki sinyal işleme sorunları ve günlük
589       borulama uygulamasının yaşam süresi için ek bir kabuk süreci ile
590       sonuçlanabilir. Apache 2.2 ile uyumluluk açısından "<code>||</code>"
591       gösterimi de desteklenmekte olup "<code>|</code>" kullanımına
592       eşdeğerdir.</p>
593
594     <note><title>Windows'ta yığın alanı</title>
595     <p>Windows'ta çok sayıda borulu günlükleme süreci çalışırken ve özellikle
596       HTTPD bir hizmet olarak çalışıyorsa sorunlar baş gösterebilir. Bunun
597       başlıca sebebi masaüstü yığın alanının (heap) dışına taşılmasıdır. Her
598       hizmete ayrılan masüstü yığın alanı, kayıt defterindeki
599       HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\SubSystems\Windows
600       kaydındaki üçüncü değiştirge olan <code>SharedSection</code>
601       değeridir. <strong>Bu değeri değiştirirken çok dikkatli olun</strong>;
602       bu, Windows kayıt defterini değiştirirken verilen normal
603       uyarılardandır, fakat eğer bu değer çok yüksek olursa masaüstü yığın
604       alanının tükenebileceği dikkate alınmalıdır.</p>
605     </note>
606   </section>
607
608   <section id="virtualhost">
609     <title>Sanal Konaklar</title>
610
611     <p>Bir sunucu çok sayıda <a href="vhosts/">sanal konak</a> ile hizmet
612       sunarken bunların günlük kayıtları için çeşitli seçenekler mevcuttur.
613       İlk seçenekte, sanki sunucu tek bir konakla hizmet sunuyormuş gibi
614       günlük kaydı yapılır. Günlükleme yönergelerini <directive module="core"
615       type="section">VirtualHost</directive> bölümlerinin dışına, ana sunucu
616       bağlamına yerleştirerek tüm isteklerin aynı erişim ve hata günlüğüne
617       yazılmasını sağlamak olasıdır. Bu teknik, tek tek sanal konaklar için
618       kolayca istatistik toplamaya izin vermez.</p>
619
620     <p>Eğer  <directive module="mod_log_config">CustomLog</directive>
621       veya <directive module="core">ErrorLog</directive> yönergesi bir
622       <directive module="core" type="section">VirtualHost</directive> bölümüne
623       yerleştirilirse bu sanal konağa bütün erişimler veya hatalar belirtilen
624       dosyaya günlüklenecektir. Böyle günlükleme yönergeleri içermeyen sanal
625       konakların günlükleri hala ana sunucunun hata ve erişim günlüklerine
626       yazılmaya devam edecektir. Bu teknik az sayıda sanal konak barındıran
627       sunucular için çok kullanışlıdır. Fakat sanal konak sayısı çok fazlaysa
628       bu teknikle günlük dosyalarını yönetmek çok karmaşık bir hal alabilir.
629       Ayrıca, <a href="vhosts/fd-limits.html">yetersiz dosya tanıtıcısı</a>
630       sorunlarıyla çok sık karşılaşılabilir.</p>
631
632     <p>Erişim günlükleri için çok az bir fedakarlıkla çok iyi bir çözüm vardır.
633       Günlük biçemine sanal konaklarla ilgili bilgi eklemek suretiyle tüm
634       konakların aynı günlük dosyasını kullanmaları olasıdır. Böylece günlük
635       dosyası sonradan her sanal konak için ayrı bir dosya oluşturmak üzere
636       ayrıştırılabilir. Örneğin, bu işlem için şu yönergeler kullanılıyor
637       olsun:</p>
638
639     <highlight language="config">
640 LogFormat "%v %l %u %t \"%r\" %&gt;s %b" ortaksankon
641 CustomLog logs/access_log ortaksankon
642     </highlight>
643
644     <p><code>%v</code> belirteci isteği sunan sanal konağın ismini günlüğe
645       yazmak için kullanılır. Daha sonra <a
646       href="programs/split-logfile.html">split-logfile</a> gibi bir program
647       kullanarak, bu dosyadan her sanal konak için ayrı birer dosya elde
648       edilebilir.</p>
649   </section>
650
651   <section id="other">
652     <title>Diğer Günlük Dosyaları</title>
653
654     <related>
655       <modulelist>
656         <module>mod_logio</module>
657         <module>mod_log_config</module>
658         <module>mod_log_forensic</module>
659         <module>mod_cgi</module>
660       </modulelist>
661
662       <directivelist>
663         <directive module="mod_log_config">LogFormat</directive>
664         <directive module="mod_log_config">BufferedLogs</directive>
665         <directive module="mod_log_forensic">ForensicLog</directive>
666         <directive module="mpm_common">PidFile</directive>
667         <directive module="mod_cgi">ScriptLog</directive>
668         <directive module="mod_cgi">ScriptLogBuffer</directive>
669         <directive module="mod_cgi">ScriptLogLength</directive>
670       </directivelist>
671     </related>
672
673     <section>
674       <title>Gönderilen ve alınan bayt sayısının günlüklenmesi</title>
675
676       <p><module>mod_logio</module> modülü <directive
677         module="mod_log_config">LogFormat</directive> yönergesinde kullanılan
678         biçem belirteçlerine alınan ve gönderilen bayt sayıları için iki
679         belirteç (%I ve %O) ekler.</p>
680     </section>
681
682     <section>
683       <title>Adli Günlük</title>
684
685       <p><module>mod_log_forensic</module> modülü istemci isteklerinin kanıt
686         olarak kullanılmak amacıyla günlüklenmesini sağlar. Günlükleme her
687         istek için isteğe hizmet sunmadan önce ve sonra olmak üzere iki defa
688         yapılır. Böylece günlük dosyasında başarılı her istek için iki satır
689         bulunur. Adli günlükleme çok sıkı kurallara tabi olup
690         kişiselleştirilemez. Güvenlik ve hata ayıklama aracı olarak yararlı
691         değildir.</p>
692     </section>
693
694     <section id="pidfile">
695       <title>PID Dosyası</title>
696
697       <p>Apache httpd başlatıldığında, ana httpd sürecinin kimliği (PID)
698         <code>logs/httpd.pid</code> dosyasına kaydedilir. Bu dosyanın ismi
699         <directive module="mpm_common">PidFile</directive> yönergesi ile
700         değiştirilebilir. Bu süreç kimliği sistem yöneticisi tarafından ana
701         sürece sinyal göndererek artalan sürecini sonlandırmak veya yeniden
702         başlatmak için kullanılır. Windows üzerinde bu işlem için
703         <code>-k</code> komut satırı seçeneği kullanılır. Bu konuda daha
704         ayrıntılı bilgi edinmek için <a href="stopping.html">Durdurma ve
705         Yeniden Başlatma</a> belgesine bakınız.</p>
706     </section>
707
708     <section id="scriptlog">
709       <title>Betik Günlüğü</title>
710
711       <p><directive module="mod_cgi">ScriptLog</directive> yönergesi CGI
712         betiklerinin girdi ve çıktılarını kaydetmenizi mümkün kılmak suretiyle
713         hata ayıklamaya yardımcı olur. Bu sadece deneysel amaçla kullanılmalı,
714         asıl sunucuya uygulanmamalıdır. <a href="mod/mod_cgi.html">mod_cgi</a>
715         belgesinde daha fazla bilgi bulunabilir.</p>
716     </section>
717   </section>
718 </manualpage>