Script automatizado para zip logs do IIS?
-
09-06-2019 - |
Pergunta
Eu gostaria de escrever um script/lote que será monte até o meu diário logs do IIS e zip-los por mês.
ex080801.registo de que é no formato de exaammdd.registo
ex080801.log - ex080831.log fica fechado e os arquivos de log excluídos.
A razão pela qual fazemos isso é porque em um site de pesados de um arquivo de log para um dia poderia ser 500mb 1gb para nós zip-los até que comprime-los por 98% e despejar o real arquivo de log.Nós usamos webtrend para analisar os arquivos de log e é capaz de ler em um arquivo zip.
Alguém tem alguma idéia sobre como fazer um script para este ou estaria disposto a compartilhar algum código?
Solução
Você vai precisar de uma ferramenta de linha de comando para compactar os arquivos.Eu recomendo 7-Zip que é gratuito e fácil de usar.A auto-contido versão de linha de comando (7za.exe) é o mais portátil escolha.
Aqui está uma de duas linhas do arquivo em lotes que seria zip os arquivos de log e excluí-los mais tarde:
7za.exe a -tzip ex%1-logs.zip %2\ex%1*.log
del %2\ex%1*.log
O primeiro parâmetro é o ano de 4 dígitos-e-mês, e o segundo parâmetro é o caminho para o diretório que contém os logs.Por exemplo: ziplogs.bat 0808 c:\logs
É possível obter mais elaboradas (por exemplo,pesquisar nomes de arquivos para determinar quais meses para arquivo).Você pode querer verificar para fora o Windows FINDSTR comando para procurar a entrada de texto com expressões regulares.
Outras dicas
Aqui está o meu script que, basicamente, adapta-se Davi, e fecha até o último mês de logs, move-los e exclui os arquivos de log original.este pode ser adaptado para os logs do Apache também.O único problema com isso é que você pode precisar editar o substituir comandos, se o ms-DOS da data da função de saídas data de semana.Você também precisará instalar o 7-zip.
Você também pode baixar IISlogslite mas ele comprime cada dia de arquivo em um único arquivo zip que eu não úteis.Há um vbscript flutuante sobre a web, que faz a mesma coisa.
------------------------------------------------------------------------------------- @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
Vamos usar um script como o seguinte.Gzip é a partir do projeto cygwin.Tenho certeza que você poderia modificar a sintaxe para utilizar um fecho de correr da ferramenta.O "ignorar" o argumento é o número de arquivos não para de arquivo off-nós manter a 11 dias na 'atual' directory.
@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
Você pode pegar os utilitários de linha de comando do pacote DotNetZip para obter ferramentas para criar zíperes a partir de scripts.Há um belo pequena ferramenta chamada Zipit.exe que é executado na linha de comandos, adiciona arquivos ou diretórios de arquivos zip.Ele é rápido e eficiente.
A melhor opção pode ser apenas fechando a partir de dentro do 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()
Emprestado zip função de http://blogs.msdn.com/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspx
Aqui é powershell resposta que faz maravilhas:
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)
}
Podemos usar este script do powershell: http://gallery.technet.microsoft.com/scriptcenter/31db73b4-746c-4d33-a0aa-7a79006317e6
Ele utiliza o 7-zip e verifys os arquivos antes de excluí-los
Regex irá fazer o truque...crie um perl/python/script php para fazer o trabalho para você..
Eu tenho certeza de ficheiro de comandos do windows não pode fazer regex.