Server IP : 103.119.228.120 / Your IP : 3.149.251.26 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/local/ssl/local/ssl/local/apache.backup/manual/ |
Upload File : |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="tr" xml:lang="tr"><head> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX This file is generated from xml source: DO NOT EDIT XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --> <title>Günlük Dosyaları - Apache HTTP Sunucusu Sürüm 2.4</title> <link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> <link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> <link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" /> <script src="./style/scripts/prettify.min.js" type="text/javascript"> </script> <link href="./images/favicon.ico" rel="shortcut icon" /></head> <body id="manual-page"><div id="page-header"> <p class="menu"><a href="./mod/">Modüller</a> | <a href="./mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="./glossary.html">Terimler</a> | <a href="./sitemap.html">Site Haritası</a></p> <p class="apache">Apache HTTP Sunucusu Sürüm 2.4</p> <img alt="" src="./images/feather.png" /></div> <div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div> <div id="path"> <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Sunucusu</a> > <a href="http://httpd.apache.org/docs/">Belgeleme</a> > <a href="./">Sürüm 2.4</a></div><div id="page-content"><div id="preamble"><h1>Günlük Dosyaları</h1> <div class="toplang"> <p><span>Mevcut Diller: </span><a href="./en/logs.html" hreflang="en" rel="alternate" title="English"> en </a> | <a href="./fr/logs.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | <a href="./ja/logs.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | <a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | <a href="./tr/logs.html" title="Türkçe"> tr </a></p> </div> <p>Bir HTTP sunucusunu verimli şekilde yönetebilmek için oluşabilecek sorunlardan başka sunucunun başarımı ve etkinliği hakkında da bazı geri bildirimler almak gerekir. Apache HTTP Sunucusu çok kapsamlı ve esnek bir günlükleme yeteneğine sahiptir. Bu belgede sunucunun günlükleme yeteneğini nasıl yapılandıracağınızdan ve günlük kayıtlarını nasıl yorumlayacağınızdan bahsedilecektir.</p> </div> <div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Giriş</a></li> <li><img alt="" src="./images/down.gif" /> <a href="#security">Güvenlik Uyarısı</a></li> <li><img alt="" src="./images/down.gif" /> <a href="#errorlog">Hata Günlüğü</a></li> <li><img alt="" src="./images/down.gif" /> <a href="#permodule">Modüllere göre günlükleme</a></li> <li><img alt="" src="./images/down.gif" /> <a href="#accesslog">Erişim Günlüğü</a></li> <li><img alt="" src="./images/down.gif" /> <a href="#rotation">Günlük Çevrimi</a></li> <li><img alt="" src="./images/down.gif" /> <a href="#piped">Borulu Günlükler</a></li> <li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Sanal Konaklar</a></li> <li><img alt="" src="./images/down.gif" /> <a href="#other">Diğer Günlük Dosyaları</a></li> </ul><h3>Ayrıca bakınız:</h3><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div> <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> <div class="section"> <h2><a name="overview" id="overview">Giriş</a></h2> <table class="related"><tr><th>İlgili Modüller</th><th>İlgili Yönergeler</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code></li><li><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td /></tr></table> <p>Apache HTTP Sunucusu, isteğin ilk alınışından itibaren, URL eşleme işlemleri, bağlantının son çözümlemesi ve bu işlemler sırasına ortaya çıkan hatalar da dahil olmak üzere sunucunuzda meydana gelen herşeyi günlüklemek için çok çeşitli mekanizmalar içerir. Buna ek olarak, günlükleme yetenekleri sağlayan üçüncü parti modüller de kullanılabilir veya mevcut günlük dosyalarına girdiler enjekte edilebilir. Ayrıca, CGI programları, PHP betikleri ve benzerleri sunucu hata günlüğüne kendi iletilerini gönderebilirler.</p> <p>Bu belgede Apache HTTP Sunucusunun standart parçası olan günlükleme modülleri hakkında bilgi verilecektir.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> <div class="section"> <h2><a name="security" id="security">Güvenlik Uyarısı</a></h2> <p>Apache httpd’nin günlük dosyalarını yazdığı dizine yazabilen birinin sunucuyu başlatan kullanıcı kimliğine (bu genellikle root olur) erişim kazanabileceğine hemen hemen kesin gözüyle bakılabilir. Sonuçlarının neler olacağını kestiremiyorsanız günlüklerin yazıldığı dizinde <em>hiç kimseye</em> yazma erişimi vermeyin; ayrıntılı bilgi için <a href="misc/security_tips.html">güvenlik ipuçları</a> belgesine bakınız.</p> <p>Buna ilaveten, günlük dosyaları istemci tarafından sağlanmış bilgiler de içerebilir. Bu nedenle, kötü niyetli istemcilerin günlük dosyalarına denetim karakterleri girmeleri olasılığına karşı ham günlükler ele alınırken dikkatli olunmalıdır.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> <div class="section"> <h2><a name="errorlog" id="errorlog">Hata Günlüğü</a></h2> <table class="related"><tr><th>İlgili Modüller</th><th>İlgili Yönergeler</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code></li><li><code class="directive"><a href="./mod/core.html#errorlogformat">ErrorLogFormat</a></code></li><li><code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code></li></ul></td></tr></table> <p>İsmi ve yeri <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code> yönergesi ile belirtilen sunucu hata günlüğü, en önemli günlük dosyasıdır. Apache httpd tarafından istekler işlenirken saptanan hatalar ve tanı bilgileri bu dosyaya gönderilir. Sunucuyu başlatırken veya sunucu çalışırken bir sorunla karşılaşıldığında, neyin yanlış gittiğini öğrenmek için bakılacak ilk yer burasıdır. Günlük kaydı çoğunlukla sorunun nasıl düzeltileceği ile ilgili ayrıntıları da içerir.</p> <p>Hata günlüğü normal olarak bir dosyaya yazılır (genellikle, dosyanın ismi Unix sistemlerinde <code>error_log</code>, OS/2 ve Windows’ta ise <code>error.log</code>’dur). Ayrıca, Unix sistemlerinde sunucunun hataları <code>syslog</code>’a veya <a href="#piped">borulamak suretiyle bir programa</a> aktarması da mümkündür.</p> <p>Hata günlüğünün biçemi <code class="directive"><a href="./mod/core.html#errorlogformat">ErrorLogFormat</a></code> yönergesi ile belirlenir. Bu yönergeyi kullanarak günlüklenen değerleri özelleştirebilirsiniz. Bir biçem belirtmezseniz öntanımlı biçem kullanılır. Örnek tipik bir hata iletisi içermektedir:</p> <div class="example"><p><code> [Fri Sep 09 10:42:29.902022 2011] [core:error] [pid 35708:tid 4328636416] [client 72.15.99.187] Dosya yok: /usr/local/apache2/htdocs/favicon.ico </code></p></div> <p>Günlük girdisinin ilk öğesi iletinin yazıldığı tarih ve saatten oluşur. İkincisi iletiyi üreten modülün ismi (bu durumda: core) ile raporlanan bilginin önem derecesini belirtir. Bunu varsa sürecin kimliği ve yine varsa evre kimliği izler. Sonraki öğe hatanın üretilmesine sebep olan istemcinin IP adresini içerir. Kalanı iletinin kendisidir (duruma bakılırsa bir dosyaya yapılan istek yerine getirilememiş).</p> <p>Hata günlüğünde görünebilecek ileti çeşitliliği oldukça fazladır. Çoğu yukarıdaki örneğin benzeridir. Hata günlüğü ayrıca, CGI betiklerinin hata ayıklama çıktılarını da içerir. Bir CGI betiği tarafından standart hataya (<code>stderr</code>) yazılan her türlü bilgi doğrudan hata günlüğüne kopyalanır.</p> <p>Hata günlüğüne ve erişim günlüğüne <code>%L</code> dizgeciği konularak erişim günlüğündeki girdi ile hata günlüğündeki girdiyi ilişkilendirecek bir günlük girdisi kimliği oluşturulabilir. <code class="module"><a href="./mod/mod_unique_id.html">mod_unique_id</a></code> yüklüyse günlük girdisi kimliği olarak onun eşsiz istek kimliği de kullanılır.</p> <p>Sunucuyu denerken olası sorunlara karşı hata günlüğünü sürekli izlemelisiniz. Unix sistemlerinde bunu şöyle bir komutla sağlayabilirsiniz:</p> <div class="example"><p><code> tail -f error_log </code></p></div> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> <div class="section"> <h2><a name="permodule" id="permodule">Modüllere göre günlükleme</a></h2> <p><code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code> yönergesi, günlük iletisinin üretilmesine sebep olan modüle bağlı bir önem seviyesi belirleyebilmenizi sağlar. Bu yolla sorun yaşadığınız modülle ilgili günlük musluklarını sonuna kadar açabiliri ek olarak ilgilendiğiniz diğer modüllerle ilgili ayrıntıları da edinebilirsiniz. Özellikle <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code> veya <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> gibi modüllerde yapılmak isteneni denerken neler olup bittiğini ayrıntılarıyla bilmek istediğiniz durumlarda kullanışlıdır.</p> <p>Bunu <code class="directive">LogLevel</code> yönergesinde modülün ismini belirterek yapabilirsiniz:</p> <pre class="prettyprint lang-config">LogLevel info rewrite:trace5</pre> <p>Bu satırla ana <code class="directive">LogLevel</code> info'ya ayarlanırken <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> için musluk <code>trace5</code> seviyesine kadar açılmaktadır.</p> <div class="note">Bu yönerge, Apache HTTP Sunucusunun evvelki sürümlerinde mevcut olan <code>RewriteLog</code> gibi günlükleme modüllerinin yerini almıştır. </div> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> <div class="section"> <h2><a name="accesslog" id="accesslog">Erişim Günlüğü</a></h2> <table class="related"><tr><th>İlgili Modüller</th><th>İlgili Yönergeler</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li></ul></td></tr></table> <p>Sunucu erişim günlüğü sunucu tarafından işleme alınan tüm istekleri kaydeder. Erişim günlüğünün yeri ve içeriği <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> yönergesi ile belirlenir. <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code> yönergesi ile günlük içeriğini kişiselleştirmek mümkündür. Bu bölümde sunucunun bilgileri erişim günlüğüne kaydetmesi için nasıl yapılandırılacağından bahsedilecektir.</p> <p>Şüphesiz, bilginin erişim günlüğünde saklanması günlük yönetiminde ilk adımı oluşturur. Sonraki adım yararlı istatistikleri üretmek için bu bilgiyi incelemektir. Günlük incelemesi bu belgenin kapsamına dahil değildir ve aslında bu işlem sunucunun yaptığı işlerden biri değildir. Bu konu ve günlük incelemesi yapan uygulamalar hakkında daha ayrıntılı bilgi edinmek için <a href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_Analysis/">dmoz.org</a>'a bakınız.</p> <p>Apache httpd’nin çeşitli sürümlerinde erişim günlüklerini denetlemek için kullanılan diğer modüller ve yönergeler arasında mod_log_referer, mod_log_agent modülleri ve <code>TransferLog</code> yönergesi sayılabilir. Artık, daha eski tüm diğer yönergelerin işlevselliklerini bir araya toplayan <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> yönergesi kullanılmaktadır.</p> <p>Erişim günlüğünün girdi biçemi kolayca isteğe göre düzenlenebilmektedir. Biçemi belirtmekte kullanılan biçem dizgesi, C tarzı printf(1) biçem dizgesini andırır. Sonraki bölümlerde bazı örneklere yer verilmiştir. Biçem dizgesini oluşturan belirteçlerin tam listesi için <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code> belgesinin <a href="mod/mod_log_config.html#formats">Günlük Girdilerinin Kişiselleştirilmesi</a> bölümüne bakınız.</p> <h3><a name="common" id="common">Ortak Günlük Biçemi (OGB)</a></h3> <p>Erişim günlüğü için sıklıkla kullanılan bir yapılandırma:</p> <pre class="prettyprint lang-config">LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog logs/access_log common</pre> <p>İlk satırda belli bir biçem dizgesi için <code>common</code> diye bir <em>takma ad</em> tanımlanmaktadır. Biçem dizgesi, sunucuya hangi belli bir bilgi parçalarını günlükleyeceğini söyleyen % imli biçem belirteçlerinden oluşur. Biçem dizgesine ayrıca dizgesel sabitler de yerleştirilebilir ve bunlar erişim günlüğüne oldukları gibi kopyalanırlar. Biçem dizgesi içinde çift tırnak karakteri (") biçem dizgesini vaktinden önce sonlandırmaması için ters bölü çizgisi ile öncelenmelidir. Biçem dizgesi ayrıca, satır sonlarını belirtmek için "<code>\n</code>" ve sekmeleri belirtmek için "<code>\t</code>" denetim karakterlerini de içerebilir.</p> <p><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> yönergesi evvelce tanımlanmış bir <em>takma adı</em> kullanarak yeni bir günlük dosyası tanımlar. Erişim günlüğünün dosya ismi bölü çizgisi ile başlamadıkça dosya yolunun <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code> değerine göreli olduğu varsayılır.</p> <p>Yukarıdaki yapılandırma günlük dosyasına girdileri Ortak Günlük Biçemi (Common Log Format) adı verilen standart biçemde yazar. Bu standart biçem başka HTTP sunucuları tarafından da kullanılır ve çoğu günlük inceleme yazılımı tarafından tanınır. Ortak Günlük Biçeminde üretilen günlük girdileri şöyle görünür:</p> <div class="example"><p><code> 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 </code></p></div> <p>Bu günlük girdisini parça parça açıklayalım:</p> <dl> <dt><code>127.0.0.1</code> (<code>%h</code>)</dt> <dd>Bu, sunucuya istek yapan istemcinin (uzak konağın) IP adresidir. Eğer <code class="directive"><a href="./mod/core.html#hostnamelookups">HostnameLookups</a></code> yönergesine <code>On</code> değeri atanmışsa sunucu bu IP adresi için DNS sorgusu yapacak ve IP adresi yerine bulduğu konak ismini yazmaya çalışacaktır. Bununla birlikte, bu işlem sunucuyu epeyce yavaşlattığından önerilmemektedir. Konak isimlerini saptamak için en iyisi günlük girdilerini <code class="program"><a href="./programs/logresolve.html">logresolve</a></code> gibi bir günlük işlemcisinden geçirmektir. Burada raporlanan IP adresi doğrudan istemcinin IP adresi olmayabilir. Eğer sunucu ile istemci arasında bir vekil sunucu varsa bu IP adresi, vekil sunucunun IP adresi olacaktır.</dd> <dt><code>-</code> (<code>%l</code>)</dt> <dd>Çıktıdaki bir "tire" imi istenen bilgi parçasının mevcut olmadığı anlamına gelir. Bu durumda, mevcut olmayan bilgi istemci makine üzerinde <code>identd</code> tarafından belirlenen istemcinin RFC 1413 kimliğidir. Bu bilgi oldukça güvenilmezdir ve sıkıca denetlenen iç ağlar haricinde hemen hemen asla kullanılmamalıdır. Apache, <code class="directive"><a href="./mod/mod_ident.html#identitycheck">IdentityCheck</a></code> yönergesine <code>On</code> değeri atanmış olmadıkça bu bilgiyi saptamaya uğraşmaz.</dd> <dt><code>frank</code> (<code>%u</code>)</dt> <dd>Bu, belge isteğinde bulunan kişinin HTTP kimlik doğrulamasıyla saptanan kullanıcı kimliğidir. Bu değer CGI betiklerine <code>REMOTE_USER</code> ortam değişkeni ile sağlanır. Eğer istek için durum kodu 401 ise (aşağıya bakınız) henüz kullanıcının kimliği doğrulanmamış olacağından bu değere güvenilmemelidir. Eğer belge parola korumalı değilse günlüğün bu kısmı da yukarıdaki gibi "<code>-</code>" olacaktır.</dd> <dt><code>[10/Oct/2000:13:55:36 -0700]</code> (<code>%t</code>)</dt> <dd>İsteğin alındığı tarih ve saat. Biçemi şöyledir: <p class="indent"> <code>[gün/ay/yıl:saat:dakika:saniye dilim]<br /> gün = 2 hane<br /> ay = 3 harf<br /> yıl = 4 hane<br /> saat = 2 hane<br /> dakika = 2 hane<br /> saniye = 2 hane<br /> dilim = (`+' | `-') 4 hane</code> </p> <p>Günlük biçem dizgesinde zaman gösterim biçemini <code>%{<em>biçem</em>}t</code> şeklinde belirtmek de mümkündür. Buradaki <code><em>biçem</em></code> dizgesi, stardart C kütüphanesindeki <code>strftime(3)</code> işlevi için tanımlanmış biçem belirteçleriyle veya desteklenen özel belirteçlerle oluşturulabilir. Ayrıntılı bilgi için <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code> <a href="mod/mod_log_config.html#formats">biçem dizgelerine</a> bakın.</p> </dd> <dt><code>"GET /apache_pb.gif HTTP/1.0"</code> (<code>\"%r\"</code>)</dt> <dd>İstemciden alınan istek satırının çift tırnaklar arasında gösterilmesi istenmiştir. İstek satırı en yararlı bilgi parçalarını içerir. Birincisi, istemci tarafından kullanılan yöntem <code>GET</code>’miş. İkinci olarak istemci <code>/apache_pb.gif</code> dosyasını istemiş ve üçüncü olarak istemci <code>HTTP/1.0</code> protokolünü kullanmış. İstek satırının bazı parçalarını bağımsız olarak da günlüklemek mümkündür. Örneğin, "<code>%m %U%q %H</code>" dizgesi, yöntem, yol, sorgu dizgesi ve protokolü kaydedecektir; bu dizge "<code>%r</code>" biçem belirtecinin tek başına yaptığı işi yapar.</dd> <dt><code>200</code> (<code>%>s</code>)</dt> <dd>Bu, sunucunun istemciye gönderdiği durum kodudur. İsteğin başarıyla yerine getirilip getirilmediğini gösterdiği için bu bilgi çok değerlidir. Durum kodu 2 ile başlıyorsa istek başarıyla yerine getirilmiştir, 3 ile başlıyorsa yönlendirilmiştir, 4 ile başlıyorsa istemci tarafında bir hata oluşmuştur, 5 ile başlıyorsa sunucuda bir hata oluşmuştur. Olası hata kodlarının tam listesi <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">RFC2616 Hiper Metin Aktarım Protokolü</a>nün 10. bölümünde bulunabilir.</dd> <dt><code>2326</code> (<code>%b</code>)</dt> <dd>Son parça istemciye döndürülen nesnenin yanıt başlığı hariç uzunluğudur. Eğer istemciye bir içerik döndürülmemişse bu değer "<code>-</code>" olacaktır. Bunun yerine günlüğe "<code>0</code>" yazdırmak için <code>%B</code> belirtecini kullanınız.</dd> </dl> <h3><a name="combined" id="combined">Birleşik Günlük Biçemi</a></h3> <p>Sıklıkla kullanılan diğer bir biçem dizgesi Birleşik Günlük Biçemi (Combined Log Format) olup şöyle kullanılabilir:</p> <pre class="prettyprint lang-config">LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined CustomLog log/access_log combined</pre> <p>Bu biçem ilaveten 2 alan içermesi dışında Ortak Günlük Biçemi ile aynıdır. İlave alanların ikisi de <code>%{<em>başlık</em>}i</code> biçeminde olup buradaki <code><em>başlık</em></code>, HTTP isteğindeki başlık alanlarından biridir. Bu biçemin kullanıldığı bir erişim günlüğü girdisi şöyle olurdu:</p> <div class="example"><p><code> 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)" </code></p></div> <p>Ek alanlar:</p> <dl> <dt><code>"http://www.example.com/start.html"</code> (<code>\"%{Referer}i\"</code>)</dt> <dd>HTTP istek başlığı "Referer". İstemcinin raporladığı isteğin kaynaklandığı URI. (Bu isteğin yapılmasını sağlayan bağlantıyı içeren URL veya istek bir sayfanın bileşenleri ile ilgiliyse istenen sayfanın URL’si olabilir.)</dd> <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code> (<code>\"%{User-agent}i\"</code>)</dt> <dd>Tarayıcı kimliğini içeren HTTP istek başlığı. Bu istemcinin tarayıcısının raporladığı kendi tanıtım bilgisidir.</dd> </dl> <h3><a name="multiple" id="multiple">Çok Sayıda Erişim Günlüğü</a></h3> <p>Yapılandırma dosyasında çok sayıda <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> yönergesi kullanarak çok sayıda erişim günlüğü kolayca oluşturulabilir. Örneğin aşağıdaki yönergelerle 3 tane erişim günlüğü oluşturulacaktır. İlki temel OGB bilgisini içerirken diğer ikisi isteğin kaynaklandığı yeri ve tarayıcı kimliğini içerir. Son iki <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> satırı ayrıca, <code>ReferLog</code> ve <code>AgentLog</code> yönergelerinin etkilerinin nasıl taklit edileceğini de göstermektedir.</p> <pre class="prettyprint lang-config">LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog logs/access_log common CustomLog logs/referer_log "%{Referer}i -> %U" CustomLog logs/agent_log "%{User-agent}i"</pre> <p>Bu örnek ayrıca, <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code> yönergesi ile bir takma ad tanımlamanın şart olmadığını da göstermektedir. Günlük biçemi doğrudan <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> yönergesinde belirtilebilir.</p> <h3><a name="conditional" id="conditional">Şarta Bağlı Günlükler</a></h3> <p>Bazı durumlarda istemcinin yaptığı isteğe bağlı olarak erişim günlüğünde belli girdilerin dışlanması gerekebilir. Bu, <a href="env.html">ortam değişkenleri</a> sayesinde kolayca yerine getirilebilir. Önce isteğin belli koşulları sağladığını belirten bir ortam değişkeni ataması yapılır. Bu işlem <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> yönergesi ile yapılır. Sonra da, ortam değişkenine bağlı olarak isteklerin günlüğe dahil edilip edilmeyeceği <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> yönergesinin <code>env=</code> deyimi kullanılarak belirtilir. Bazı örnekler:</p> <pre class="prettyprint lang-config"># yerel konaktan kaynaklanan istekleri imleyelim SetEnvIf Remote_Addr "127\.0\.0\.1" kaydetme # robots.txt dosyası isteklerini imleyelim SetEnvIf Request_URI "^/robots\.txt$" kaydetme # Kalanları günlüğe kaydedelim CustomLog logs/access_log common env=!kaydetme</pre> <p>Başka bir örnek olarak, Türkçe belge isteklerini bir dosyaya diğer dillerdeki istekleri başka bir dosyaya kaydedelim.</p> <pre class="prettyprint lang-config">SetEnvIf Accept-Language "tr" turkce CustomLog logs/turkce_log common env=turkce CustomLog logs/diger_diller_log common env=!turkce</pre> <p>Bir arabellekleme senaryosuna arabelleğin verimli kullanılıp kullanılmadığını bilmek isteyelim. Bu basitçe şöyle yapılabilir:</p> <pre class="prettyprint lang-config">SetEnv CACHE_MISS 1 LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache CustomLog logs/access_log common-cache</pre> <p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> önce <code class="module"><a href="./mod/mod_env.html">mod_env</a></code> modülünü çalıştıracak ve başarılı olunduğu takdirde içeriği onsuz teslim edecektir. Bu durumda arabellek kaybı <code>1</code> olarak günlüklenirken arabellek sunumu <code>-</code> olarak günlüklenecektir.</p> <p><code>env=</code> sözdizimine ek olarak, <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code> HTTP yanıt kodudaki koşul değerlerini günlüklemeyi de destekler:</p> <pre class="prettyprint lang-config">LogFormat "%400,501{User-agent}i" browserlog LogFormat "%!200,304,302{Referer}i" refererlog</pre> <p>Bu örnekte, HTTP durum kodu 400 veya 501 ise <code>User-agent</code> başlığı günlüklenecektir. Aksi takdirde, günlüğe bir "-" yazılacaktır. Benzer şekilde ikinci örnekte, HTTP durum kodu 200, 204 veya 302 <strong>değilse</strong> (durum kodlarının öncesindeki "!" imine dikkat) <code>Referer</code> başlığı günlüklenecektir.</p> <p>Koşula bağlı günlük kaydının çok esnek ve güçlü olabileceğini göstermiş olsak da günlük içeriğini denetlemenin tek yolu bu değildir. Günlük dosyaları sunucu etkinliğini eksiksiz olarak kaydedebildikleri takdirde daha yararlı olurlar. Günlük dosyalarını sonradan işleme tabi tutarak istenmeyen girdileri kaldırılmış bir kopya almak hem kolay hem de daha yararlıdır.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> <div class="section"> <h2><a name="rotation" id="rotation">Günlük Çevrimi</a></h2> <p>Yükü ağır sunucularda günlük dosyalarına kaydedilen bilginin miktarı çok büyük boyutlara ulaşabilir. 10.000 istek içeren bir erişim günlüğü yaklaşık 1MB yer kaplar. Etkin günlük dosyasını belirli aralıklarla değiştirmek veya silmek gerekebilir. Apache httpd çalışırken dosyayı sürekli açık tuttuğu ve yazdığı için bu işlem sunucu çalışırken yapılamaz. Bu bakımdan, günlük dosyası değiştirildikten veya silindikten sonra yeni dosyanın açılması için <a href="stopping.html">sunucunun yeniden başlatılması</a> gerekir.</p> <p><a href="stopping.html#graceful">Nazikçe yeniden başlatmak</a> suretiyle sunucunun, mevcut ve bekleyen bağlantıları kaybetmeden yeni günlük dosyalarını açması sağlanabilir. Bununla birlikte, bu işlem sırasında sunucunun eski isteklere sunumu bitirene kadar eski günlük dosyalarına yazmaya devam edebilmesi gerekir. Bu bakımdan, yeniden başlatmanın ardından eski günlük dosyaları üzerinde bir işlem yapmadan önce biraz beklemek gerekir. Günlük dosyalarını döndürürken kullanılan senaryolarda genellikle eski günlük dosyaları yer kazanmak için sıkıştırılırlar:</p> <div class="example"><p><code> mv access_log access_log.old<br /> mv error_log error_log.old<br /> apachectl graceful<br /> sleep 600<br /> gzip access_log.old error_log.old </code></p></div> <p>Günlük çevrimi yapmanın başka bir yolu da sonraki bölümde açıklandığı gibi <a href="#piped">borulu günlükler</a> kullanmaktır.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> <div class="section"> <h2><a name="piped" id="piped">Borulu Günlükler</a></h2> <p>Apache httpd hata ve erişim günlüklerini doğrudan bir dosyaya yazmak yerine bir boru üzerinden başka bir sürece yazabilir. Bu yetenek ana sunucuya herhangi bir kod eklemeksizin günlükleme esnekliğini şaşırtıcı derecede arttırır. Günlükler boruya yazılmak istenirse dosya ismini boru karakteriyle ("<code>|</code>") değiştirip ardına günlük girdilerini standart girdisinden kabul edecek programın ismini eklemek yeterlidir. Apache httpd başlatıldığı zaman borulu günlük işlemini de başlatacaktır. Eğer sunucu çalışırken günlükleri kabul eden süreç çökerse Apache httpd bu programı yeniden başlatır. (Bu son özelliği sebebiyle bu tekniğe “güvenilir borulu günlükleme” adını veriyoruz.)</p> <p>Borulu günlük süreçleri ana Apache httpd süreci tarafından başlatılır ve bu süreçler ana Apache httpd sürecinin kullanıcı kimliğini miras alırlar. Yani borulu günlükleme programları aslında root tarafından çalıştırılmış gibi olur. Bu bakımdan, bu programları basit ve güvenilir kılmak çok önemlidir.</p> <p>Borulu günlüklerin önemli kullanım alanlarından biri de sunucuyu yeniden başlatmak gerekmeksizin günlük çevrimini mümkün kılmaktır. Apache HTTP sunucusu bu amaçla kullanılmak üzere <code class="program"><a href="./programs/rotatelogs.html">rotatelogs</a></code> diye bir program içerir. Örneğin, günlükleri 24 saatte bir döndürmek isterseniz bunu şöyle yapabilirsiniz:</p> <pre class="prettyprint lang-config">CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common</pre> <p>Borunun diğer ucundaki süreci başlatacak komutun tırnak içine alındığına dikkat ediniz. Bu örnekler erişim günlüğü için verilmişse de aynı teknik hata günlüğü için de kullanılabilir.</p> <p>Hariçten bir uygulama olarak <a href="http://www.cronolog.org/">cronolog</a> isminde buna benzer ancak çok daha esnek bir program daha vardır.</p> <p>Borulu günlükler de şarta bağlı günlükleme kadar güçlü olmakla beraber çevrimdışı ardıl işlemler gibi daha basit çözümler için kullanılmamalıdır.</p> <p>Öntanımlı olarak borulu günlük süreci bir kabuk kullanmadan çalıştırılır. Kabuk kullanarak (genelde <code>/bin/sh -c</code> ile) yapılmak istenirse "<code>|</code>" yerine "<code>|$</code>" kullanılır:</p> <pre class="prettyprint lang-config"># Kabuk kullanarak "rotatelogs" çalıştırmak CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common</pre> <p>Bu, Apache 2.2 için öntanımlı davranıştı. Kabuk özelliklerine bağlı olarak, yeniden başlatma sırasındaki sinyal işleme sorunları ve günlük borulama uygulamasının yaşam süresi için ek bir kabuk süreci ile sonuçlanabilir. Apache 2.2 ile uyumluluk açısından "<code>||</code>" gösterimi de desteklenmekte olup "<code>|</code>" kullanımına eşdeğerdir.</p> <div class="note"><h3>Windows'ta yığın alanı</h3> <p>Windows'ta çok sayıda borulu günlükleme süreci çalışırken ve özellikle HTTPD bir hizmet olarak çalışıyorsa sorunlar baş gösterebilir. Bunun başlıca sebebi masaüstü yığın alanının (heap) dışına taşılmasıdır. Her hizmete ayrılan masüstü yığın alanı, kayıt defterindeki HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\SubSystems\Windows kaydındaki üçüncü değiştirge olan <code>SharedSection</code> değeridir. <strong>Bu değeri değiştirirken çok dikkatli olun</strong>; bu, Windows kayıt defterini değiştirirken verilen normal uyarılardandır, fakat eğer bu değer çok yüksek olursa masaüstü yığın alanının tükenebileceği dikkate alınmalıdır.</p> </div> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> <div class="section"> <h2><a name="virtualhost" id="virtualhost">Sanal Konaklar</a></h2> <p>Bir sunucu çok sayıda <a href="vhosts/">sanal konak</a> ile hizmet sunarken bunların günlük kayıtları için çeşitli seçenekler mevcuttur. İlk seçenekte, sanki sunucu tek bir konakla hizmet sunuyormuş gibi günlük kaydı yapılır. Günlükleme yönergelerini <code class="directive"><a href="./mod/core.html#virtualhost"><VirtualHost></a></code> bölümlerinin dışına, ana sunucu bağlamına yerleştirerek tüm isteklerin aynı erişim ve hata günlüğüne yazılmasını sağlamak olasıdır. Bu teknik, tek tek sanal konaklar için kolayca istatistik toplamaya izin vermez.</p> <p>Eğer <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> veya <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code> yönergesi bir <code class="directive"><a href="./mod/core.html#virtualhost"><VirtualHost></a></code> bölümüne yerleştirilirse bu sanal konağa bütün erişimler veya hatalar belirtilen dosyaya günlüklenecektir. Böyle günlükleme yönergeleri içermeyen sanal konakların günlükleri hala ana sunucunun hata ve erişim günlüklerine yazılmaya devam edecektir. Bu teknik az sayıda sanal konak barındıran sunucular için çok kullanışlıdır. Fakat sanal konak sayısı çok fazlaysa bu teknikle günlük dosyalarını yönetmek çok karmaşık bir hal alabilir. Ayrıca, <a href="vhosts/fd-limits.html">yetersiz dosya tanıtıcısı</a> sorunlarıyla çok sık karşılaşılabilir.</p> <p>Erişim günlükleri için çok az bir fedakarlıkla çok iyi bir çözüm vardır. Günlük biçemine sanal konaklarla ilgili bilgi eklemek suretiyle tüm konakların aynı günlük dosyasını kullanmaları olasıdır. Böylece günlük dosyası sonradan her sanal konak için ayrı bir dosya oluşturmak üzere ayrıştırılabilir. Örneğin, bu işlem için şu yönergeler kullanılıyor olsun:</p> <pre class="prettyprint lang-config">LogFormat "%v %l %u %t \"%r\" %>s %b" ortaksankon CustomLog logs/access_log ortaksankon</pre> <p><code>%v</code> belirteci isteği sunan sanal konağın ismini günlüğe yazmak için kullanılır. Daha sonra <a href="programs/split-logfile.html">split-logfile</a> gibi bir program kullanarak, bu dosyadan her sanal konak için ayrı birer dosya elde edilebilir.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> <div class="section"> <h2><a name="other" id="other">Diğer Günlük Dosyaları</a></h2> <table class="related"><tr><th>İlgili Modüller</th><th>İlgili Yönergeler</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code></li><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#bufferedlogs">BufferedLogs</a></code></li><li><code class="directive"><a href="./mod/mod_log_forensic.html#forensiclog">ForensicLog</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptloglength">ScriptLogLength</a></code></li></ul></td></tr></table> <h3>Gönderilen ve alınan bayt sayısının günlüklenmesi</h3> <p><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code> modülü <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code> yönergesinde kullanılan biçem belirteçlerine alınan ve gönderilen bayt sayıları için iki belirteç (%I ve %O) ekler.</p> <h3>Adli Günlük</h3> <p><code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code> modülü istemci isteklerinin kanıt olarak kullanılmak amacıyla günlüklenmesini sağlar. Günlükleme her istek için isteğe hizmet sunmadan önce ve sonra olmak üzere iki defa yapılır. Böylece günlük dosyasında başarılı her istek için iki satır bulunur. Adli günlükleme çok sıkı kurallara tabi olup kişiselleştirilemez. Güvenlik ve hata ayıklama aracı olarak yararlı değildir.</p> <h3><a name="pidfile" id="pidfile">PID Dosyası</a></h3> <p>Apache httpd başlatıldığında, ana httpd sürecinin kimliği (PID) <code>logs/httpd.pid</code> dosyasına kaydedilir. Bu dosyanın ismi <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code> yönergesi ile değiştirilebilir. Bu süreç kimliği sistem yöneticisi tarafından ana sürece sinyal göndererek artalan sürecini sonlandırmak veya yeniden başlatmak için kullanılır. Windows üzerinde bu işlem için <code>-k</code> komut satırı seçeneği kullanılır. Bu konuda daha ayrıntılı bilgi edinmek için <a href="stopping.html">Durdurma ve Yeniden Başlatma</a> belgesine bakınız.</p> <h3><a name="scriptlog" id="scriptlog">Betik Günlüğü</a></h3> <p><code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code> yönergesi CGI betiklerinin girdi ve çıktılarını kaydetmenizi mümkün kılmak suretiyle hata ayıklamaya yardımcı olur. Bu sadece deneysel amaçla kullanılmalı, asıl sunucuya uygulanmamalıdır. <a href="mod/mod_cgi.html">mod_cgi</a> belgesinde daha fazla bilgi bulunabilir.</p> </div></div> <div class="bottomlang"> <p><span>Mevcut Diller: </span><a href="./en/logs.html" hreflang="en" rel="alternate" title="English"> en </a> | <a href="./fr/logs.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | <a href="./ja/logs.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | <a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | <a href="./tr/logs.html" title="Türkçe"> tr </a></p> </div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Yorum</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div> <script type="text/javascript"><!--//--><![CDATA[//><!-- var comments_shortname = 'httpd'; var comments_identifier = 'http://httpd.apache.org/docs/2.4/logs.html'; (function(w, d) { if (w.location.hostname.toLowerCase() == "httpd.apache.org") { d.write('<div id="comments_thread"><\/div>'); var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); } else { d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); } })(window, document); //--><!]]></script></div><div id="footer"> <p class="apache">Copyright 2018 The Apache Software Foundation.<br /><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> altında lisanslıdır.</p> <p class="menu"><a href="./mod/">Modüller</a> | <a href="./mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="./glossary.html">Terimler</a> | <a href="./sitemap.html">Site Haritası</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- if (typeof(prettyPrint) !== 'undefined') { prettyPrint(); } //--><!]]></script> </body></html>