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