Автоматизированный script для записи журналов IIS?
Я хотел бы написать script/пакет, который свяжет мои ежедневные журналы IIS и застегивает их по месяцам.
ex080801.log, который находится в формате exyymmdd.log
ex080801.log - ex080831.log зашифровывается и файлы журнала удаляются.
Причина, по которой мы это делаем, - это то, что на тяжелом сайте файл журнала за один день может быть от 500 до 1 гб, поэтому мы застегиваем их, что сжимает их на 98% и выгружает реальный файл журнала. Мы используем webtrend для анализа файлов журнала, и он способен читать в zip файл.
Есть ли у кого-нибудь идеи о том, как script это или захочет поделиться каким-то кодом?
Ответы
Ответ 1
Вам понадобится инструмент командной строки для архивирования файлов. Я рекомендую 7-Zip, который является бесплатным и простым в использовании. Автономная версия командной строки (7za.exe) является наиболее переносимым выбором.
Здесь двухстрочный командный файл, который будет застегивать файлы журнала и удалять их впоследствии:
7za.exe a -tzip ex%1-logs.zip %2\ex%1*.log
del %2\ex%1*.log
Первый параметр - это 4-значный год и месяц, а второй параметр - путь к каталогу, содержащему ваши журналы. Например: ziplogs.bat 0808 c:\logs
Можно получить более подробную информацию (например, искать имена файлов, чтобы определить, какие месяцы нужно архивировать). Возможно, вы захотите проверить команду Windows FINDSTR для поиска текста ввода с регулярными выражениями.
Ответ 2
Здесь мой script, который в основном адаптирует Дэвида и застегивает последние журналы в прошлом месяце, перемещает их и удаляет исходные файлы журналов. это также можно адаптировать для журналов Apache.
Единственная проблема с этим - вам может потребоваться отредактировать команды замены, если ваша функция даты DOS выводит дату недели.
Вам также потребуется установить 7-zip.
Вы также можете загрузить IISlogslite, но он сжимает каждый день файл в один ZIP файл, который я не нашел полезным. Существует 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
Ответ 3
Мы используем script следующим образом. Gzip - это проект cygwin. Я уверен, что вы можете изменить синтаксис, чтобы вместо этого использовать zip-инструмент. Аргумент "пропустить" - это количество файлов, которые не архивируются - мы сохраняем 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
Ответ 4
Вы можете захватить пакет утилит командной строки из DotNetZip, чтобы получить инструменты для создания застежек из скриптов. Там есть небольшой инструмент Zipit.exe, который запускается в командной строке, добавляет файлы или каталоги в zip файлы. Это быстро, эффективно.
Лучшим вариантом может быть просто сделать zipping из 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()
Ответ 5
Заемная функция zip из http://blogs.msdn.com/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspx
Вот ответ 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)
}
Ответ 6
Мы используем эту powershell script: http://gallery.technet.microsoft.com/scriptcenter/31db73b4-746c-4d33-a0aa-7a79006317e6
Он использует 7-zip и проверяет файлы перед их удалением
Ответ 7
Regex выполнит трюк... создайте perl/python/PHP скрипт, чтобы выполнить эту работу для вас..
Я уверен, что пакетный файл Windows не может выполнять регулярное выражение.