Сведения о вопросе

Faridun

04:50, 26th August, 2020

Теги

iis   batch-file   zip   scripting   logging    

Автоматический скрипт для zip IIS журналов?

Просмотров: 561   Ответов: 7

Я хотел бы написать сценарий / пакет, который будет собирать мои ежедневные журналы IIS и zip по месяцам.

ex080801.log который находится в формате ex yymmdd .log

ex080801.log - ex080831.log получает молнии и файлы журнала удаляются.

Причина, по которой мы делаем это, заключается в том, что на тяжелом сайте файл журнала За один день может составлять от 500 МБ до 1 Гб, поэтому мы zip их сжимаем, который сжимает их на 98% и сбрасывает реальный файл журнала. Мы используем webtrend для анализа файлов журнала, и он способен считывать в файл zip.

Есть ли у кого-нибудь идеи о том, как это сделать, или вы хотели бы поделиться каким-то кодом?



  Сведения об ответе

9090

21:11, 4th August, 2020

Вам понадобится инструмент командной строки для zip up файлов. Я рекомендую 7-Zip , который является бесплатным и простым в использовании. Автономная версия командной строки (7za.exe) является наиболее переносимым выбором.

Вот двухстрочный пакетный файл, который будет zip файлы журнала и удалить их после этого:

7za.exe a -tzip ex%1-logs.zip %2\ex%1*.log
del %2\ex%1*.log

Первый параметр - это 4-значная цифра year-and-month, а второй параметр-путь к каталогу, содержащему ваши журналы. Например: ziplogs.bat 0808 c:\logs

Можно получить более сложные (т. е. поиск по именам файлов, чтобы определить, какие месяцы архивировать). Возможно, вы захотите проверить команду Windows FINDSTR для поиска входного текста с регулярными выражениями.


  Сведения об ответе

fo_I_K

02:47, 29th August, 2020

Вот мой сценарий, который в основном адаптируется к Дэвиду, и застегивает журналы прошлого месяца, перемещает их и удаляет исходные файлы журналов. это может быть адаптировано и для журналов Apache. Единственная проблема с этим заключается в том, что вам может потребоваться изменить команды замены, если ваша функция DOS date выводит дату недели. Вам также нужно будет установить 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


  Сведения об ответе

SEEYOU

19:11, 28th August, 2020

Мы используем следующий сценарий. Gzip - это из проекта cygwin. Я уверен, что вы могли бы изменить синтаксис, чтобы использовать вместо этого инструмент zip. Аргумент "skip" - это количество файлов, которые не нужно архивировать - мы храним 11 дней в каталоге 'current'.

@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


  Сведения об ответе

#hash

12:32, 29th August, 2020

Заимствованная функция 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)
}


  Сведения об ответе

lats

12:02, 7th August, 2020

Вы можете взять пакет утилит командной строки из 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()


  Сведения об ответе

ITSME

00:47, 28th August, 2020

Мы используем этот powershell скрипт: http://gallery.technet.microsoft.com/scriptcenter/31db73b4-746c-4d33-a0aa-7a79006317e6

Он использует 7-zip и проверяет файлы перед их удалением


  Сведения об ответе

PIRLO

21:06, 1st October, 2020

Regex сделает свое дело... создайте сценарий perl/python/php, чтобы выполнить эту работу за вас..
Я почти уверен, что пакетный файл windows не может сделать regex.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться