logs/error_log
CustomLog logs/access_log common
--默認為以上部分 修改為如下:
ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/10.70.25.143:10002.errorlog.%Y%m%d%H 7200 480"
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/10.70.25.143:10002.accesslog.%Y%m%d%H 7200 480" common
注釋:
Apache提供了不把日志直接寫入文件,而是通過管道發送給另外一個程序的能力。這樣就大大加強了對日志進行處理的能力。這個通過管道得到的程序可以是任意程序,如日志分析、壓縮日志等。要實現將日志寫到管道的操作,只需要將配置中日志文件部分的內容替換為"|程序名"即可,例如:
# compressed logs
$ CustomLog "|/usr/bin/gzip -c >> /var/log/access_log.gz" common
使用Apache自帶的輪循工具rotatelogs來對日志文件進行輪循。rotatelogs基本是按時間或大小來控制日志的。
用時間控制日志文件,例如:
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/10.70.25.143:10002.accesslog.%Y%m%d%H 7200 480" common用文件大小控制日志文件,例如:
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/10.70.25.143:10002.accesslog.%Y%m%d%H 5M" common
這里的7200 單位是秒(7200s=2h)也就是說 兩小時對日志進行一次輪循,重新生成一log文件。而生成文件的格式是
10.70.25.143:10002.errorlog.%Y%m%d%H (具體參數可隨意設置,見如下格式手冊)若不設置會被自動加上以秒為單位的".nnnnnnnnnn"后綴。
480 為時差,文件的時間為美國時間,中國的時差要比美國多8個小時也就是480分鐘,所以要加上480分鐘
其中common為日志記錄格式里設置的名稱。
若有多個站點,則應將以上配置寫到各站點的VirtualHost節點中,這樣才會分開文件記錄各站點日志。
5M 為文件大小限制
語法:
rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]
選項:
-l
使用本地時間代替GMT時間作為時間基準。注意:在一個改變GMT偏移量(比如夏令時)的環境中使用-l會導致不可預料的結果。
logfile
它加上基準名就是日志文件名。如果logfile中包含"%",則它會被視為用于strftime()的格式字符串;否則它會被自動加上以秒為單位的".nnnnnnnnnn"后綴。這兩種格式都表示新的日志開始使用的時間。
rotationtime
日志文件滾動的以秒為單位的間隔時間。
offset
相對于UTC的時差的分鐘數。如果省略,則假定為"0"并使用UTC時間。比如,要指定UTC時差為"-5小時"的地區的當地時間,則此參數應為"-300"。
filesizeM
指定以filesizeM文件大小滾動,而不是按照時間或時差滾動。
下列日志文件格式字串可以為所有的strftime(3)實現所支持,見各種擴展庫對應的strftime(3)的手冊:
%A 星期名全稱(本地的)
%a 3個字符的星期名(本地的)
%B 月份名的全稱(本地的)
%b 3個字符的月份名(本地的)
%c 日期和時間(本地的)
%d 2位數的一個月中的日期數
%H 2位數的小時數(24小時制)
%I 2位數的小時數(12小時制)
%j 3位數的一年中的日期數
%M 2位數的分鐘數
%m 2位數的月份數
%p am/pm12小時制的上下午(本地的)
%S 2位數的秒數
%U 2位數的一年中的星期數(星期天為一周的第一天)
%W 2位數的一年中的星期數(星期一為一周的第一天)
%w 1位數的星期幾(星期天為一周的第一天)
%X 時間(本地的)
%x 日期(本地的)
%Y 4位數的年份
%y 2位數的年份
%Z 時區名
%% 符號"%"本身
其他
日志格式設置:
默認設置:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
詳解:(如下來自網絡)
apache日志記錄格式的設置
定制日志文件的格式涉及到兩個指令,即LogFormat指令和CustomLog指令,默認httpd.conf文件提供了關于這兩個指令的幾個示例。
LogFormat指令定義格式并為格式指定一個名字,以后我們就可以直接引用這個名字。CustomLog指令設置日志文件,并指明日志文件所用的格式(通常通過格式的名字)。
LogFormat指令的功能是定義日志格式并為它指定一個名字。例如,在默認的httpd.conf文件中,我們可以找到下面這行代碼:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
該指令創建了一種名為“common”的日志格式,日志的格式在雙引號包圍的內容中指定。格式字符串中的每一個變量代表著一項特定的信息,這些信息按照格式串規定的次序寫入到日志文件。
Apache文檔已經給出了所有可用于格式串的變量及其含義,下面是其譯文:
%…a: 遠程IP地址
%…A: 本地IP地址
%…B: 已發送的字節數,不包含HTTP頭
%…b: CLF格式的已發送字節數量,不包含HTTP頭。例如當沒有發送數據時,寫入‘-’而不是0。
%…{FOOBAR}e: 環境變量FOOBAR的內容
%…f: 文件名字
%…h: 遠程主機
%…H 請求的協議
%…{Foobar}i: Foobar的內容,發送給服務器的請求的標頭行。
%…l: 遠程登錄名字(來自identd,如提供的話)
%…m 請求的方法
%…{Foobar}n: 來自另外一個模塊的注解“Foobar”的內容
%…{Foobar}o: Foobar的內容,應答的標頭行
%…p: 服務器響應請求時使用的端口
%…P: 響應請求的子進程ID。
%…q 查詢字符串(如果存在查詢字符串,則包含“?”后面的部分;否則,它是一個空字符串。)
%…r: 請求的第一行
%…s: 狀態。對于進行內部重定向的請求,這是指*原來*請求 的狀態。如果用%…>s,則是指后來的請求。
%…t: 以公共日志時間格式表示的時間(或稱為標準英文格式)
%…{format}t: 以指定格式format表示的時間
%…T: 為響應請求而耗費的時間,以秒計
%…u: 遠程用戶(來自auth;如果返回狀態(%s)是401則可能是偽造的)
%…U: 用戶所請求的URL路徑
%…v: 響應請求的服務器的ServerName
%…V: 依照UseCanonicalName設置得到的服務器名字
在所有上面列出的變量中,“…”表示一個可選的條件。如果沒有指定條件,則變量的值將以“-”取代。分析前面來自默認httpd.conf文件的 LogFormat指令示例,可以看出它創建了一種名為“common”的日志格式,其中包括:遠程主機,遠程登錄名字,遠程用戶,請求時間,請求的第一 行代碼,請求狀態,以及發送的字節數。
有時候我們只想在日志中記錄某些特定的、已定義的信息,這時就要用到“…”。如果在“%”和變量之間放入了一個或者多個HTTP狀態代碼,則只有當請 求返回的狀態代碼屬于指定的狀態代碼之一時,變量所代表的內容才會被記錄。例如,如果我們想要記錄的是網站的所有無效鏈接,那么可以使用:
LogFormat %404{Referer}i BrokenLinks
反之,如果我們想要記錄那些狀態代碼不等于指定值的請求,只需加入一個“!”符號即可:
LogFormat %!200U SomethingWrong
專門記錄某個蜘蛛記錄
SetEnvIfNoCase User-Agent Baiduspider baidu_robot
LogFormat “%h %t \”%r\” %>s %b” robot
linux下
CustomLog “|/usr/local/apache2.2.0/bin/rotatelogs /usr/local/apache2.2.0/logs/baidu_%Y%m%d.txt 86400 480″ robot env=baidu_robot
windows下
CustomLog “|bin/rotatelogs.exe logs/baidu_%Y%m%d.txt 86400 480″ robot env=baidu_robot
這樣在logs目錄下,就會每天產生baidu_年月日.txt的日志了,每條的記錄和下面的類似:
61.135.168.14 [22/Oct/2008:22:21:26 +0800] “GET / HTTP/1.1″ 200 8427
去掉日志中的圖片、js、css、swf文件
<FilesMatch "\.(ico|gif|jpg|png|bmp|swf|css|js)">
SetEnv IMAG 1
</FilesMatch>
CustomLog "|bin/cronolog.exe logs/cpseadmin/access_%Y%m%d.log" combined env=!IMAG
不含病毒。www.avast.com |
留言列表