我想編寫一個腳本/批處理,將我的日常IIS日誌聚集在一起並按月壓縮。自動腳本壓縮IIS日誌?
ex080801.log這在恩格式YYMMDD .LOG
ex080801.log - ex080831.log被壓縮了和日誌文件中刪除。
我們這樣做的原因是因爲在一個沉重的網站上,一天中的日誌文件可能是500MB到1GB,所以我們將它壓縮,壓縮它們98%並轉儲真實的日誌文件。我們使用webtrend來分析日誌文件,並且它能夠讀入zip文件。
有沒有人有任何想法如何腳本或願意分享一些代碼?
我想編寫一個腳本/批處理,將我的日常IIS日誌聚集在一起並按月壓縮。自動腳本壓縮IIS日誌?
ex080801.log這在恩格式YYMMDD .LOG
ex080801.log - ex080831.log被壓縮了和日誌文件中刪除。
我們這樣做的原因是因爲在一個沉重的網站上,一天中的日誌文件可能是500MB到1GB,所以我們將它壓縮,壓縮它們98%並轉儲真實的日誌文件。我們使用webtrend來分析日誌文件,並且它能夠讀入zip文件。
有沒有人有任何想法如何腳本或願意分享一些代碼?
正則表達式將做的伎倆...創建一個perl/python/php腳本來爲你做這項工作..我很確定windows批處理文件不能做正則表達式。
我們使用類似下面的腳本。 Gzip來自cygwin項目。我相信你可以修改語法來代替使用壓縮工具。 「跳過」參數是不存檔的文件數量 - 我們在「當前」目錄中保留11天。
@echo off
setlocal
For /f "skip=11 delims=/" %%a in ('Dir D:\logs\W3SVC1\*.log /B /O:-N /T:C')do move "D:\logs\W3SVC1\%%a" "D:\logs\W3SVC1\old\%%a"
d:
cd "\logs\W3SVC1\old"
gzip -n *.log
Endlocal
exit
這是我的腳本,基本上適應大衛的,並拉上上個月的日誌,移動它們,並刪除原來的日誌文件。這也可以適用於Apache日誌。 唯一的問題是你可能需要編輯替換命令,如果你的DOS日期函數輸出星期幾。 您還需要安裝7-zip。
您也可以下載IISlogslite,但它會將每天的文件壓縮到一個我沒有發現的zip文件中。有一個關於web的vbscript漂浮在同一件事情上。
------------------------------------------------------------------------------------- @echo on :: Name - iislogzip.bat :: Description - Server Log File Manager :: :: History :: Date Authory Change :: 27-Aug-2008 David Crow Original (found on stack overflow) :: 15-Oct-2008 AIMackenzie Slimmed down commands :: ======================================================== :: setup variables and parameters :: ======================================================== :: generate date and time variables set month=%DATE:~3,2% set year=%DATE:~8,2% ::Get last month and check edge conditions set /a lastmonth=%month%-1 if %lastmonth% equ 0 set /a year=%year%-1 if %lastmonth% equ 0 set lastmonth=12 if %lastmonth% lss 10 set lastmonth=0%lastmonth% set yymm=%year%%lastmonth% set logpath="C:\WINDOWS\system32\LogFiles" set zippath="C:\Program Files\7-Zip\7z.exe" set arcpath="C:\WINDOWS\system32\LogFiles\WUDF" :: ======================================================== :: Change to log file path :: ======================================================== cd /D %logpath% :: ======================================================== :: zip last months IIS log files, move zipped file to archive :: then delete old logs :: ======================================================== %zippath% a -tzip ex%yymm%-logs.zip %logpath%\ex%yymm%*.log move "%logpath%\*.zip" "%arcpath%" del %logpath%\ex%yymm%*.log
您可以從DotNetZip搶命令行實用程序包來獲取工具來創建腳本的拉鍊。有一個稱爲Zipit.exe的小工具,它可以在命令行上運行,將文件或目錄添加到zip文件中。它速度快,效率高。
更好的選擇可能是從PowerShell中進行壓縮。
function ZipUp-Files ($directory)
{
$children = get-childitem -path $directory
foreach ($o in $children)
{
if ($o.Name -ne "TestResults" -and
$o.Name -ne "obj" -and
$o.Name -ne "bin" -and
$o.Name -ne "tfs" -and
$o.Name -ne "notused" -and
$o.Name -ne "Release")
{
if ($o.PSIsContainer)
{
ZipUp-Files ($o.FullName)
}
else
{
if ($o.Name -ne ".tfs-ignore" -and
!$o.Name.EndsWith(".cache") -and
!$o.Name.EndsWith(".zip"))
{
Write-output $o.FullName
$e= $zipfile.AddFile($o.FullName)
}
}
}
}
}
[System.Reflection.Assembly]::LoadFrom("c:\\\bin\\Ionic.Zip.dll");
$zipfile = new-object Ionic.Zip.ZipFile("zipsrc.zip");
ZipUp-Files "DotNetZip"
$zipfile.Save()
這裏借用ZIP功能是PowerShell的答案是可以創造奇蹟:
param([string]$Path = $(read-host "Enter the path"))
function New-Zip
{
param([string]$zipfilename)
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
function Add-Zip
{
param([string]$zipfilename)
if(-not (test-path($zipfilename)))
{
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
foreach($file in $input)
{
$zipPackage.CopyHere($file.FullName)
Start-sleep -milliseconds 500
}
}
$FilesToZip = dir $Path -recurse -include *.log
foreach ($file in $FilesToZip) {
New-Zip $file.BaseName
dir $($file.directoryname+"\"+$file.name) | Add-zip $($file.directoryname+"\$($file.basename).zip")
del $($file.directoryname+"\"+$file.name)
}
我們使用這個PowerShell腳本:http://gallery.technet.microsoft.com/scriptcenter/31db73b4-746c-4d33-a0aa-7a79006317e6
它採用7-ZIP和驗證了該對文件刪除之前
我猜日期格式只是爲了更新版本的Windows,但爲了在Windows 7中正確地獲取月份和日期,我必須將這些行更改爲: set month =%DATE:〜4,2% set year =%DATE:〜12, 2% – 2010-05-01 21:44:43