Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- :: Name - svrlogmng.bat
- :: Description - Server Log File Manager
- ::
- :: History
- :: Date Authory Change
- :: 22-May-2005 AGButler Original
- :: 14-Jan-2008 AIMackenzie Changed net stops and paths where necessary
- :: ========================================================
- :: setup variables and parameters
- :: ========================================================
- :: generate date and time variables
- for /f "tokens=2,3,4 delims=/ " %%i in ('date /T') do set trdt=%%k%%j%%i
- for /f "tokens=1,2 delims=: " %%i in ('time /T') do set trtt=%%i%%j
- set nftu=%trdt%%trtt%
- :: set the Number Of Archives To Keep
- set /a noatk=8
- :: ========================================================
- :: turn over log files
- :: ========================================================
- :: change to the apache log file directory
- cd /D "D:Program FilesApache Software FoundationApache2.2logs"
- :: stop Apache Service, Move log files and restart Apache Service
- "D:Program FilesApache Software FoundationApache2.2binhttpd.exe" -k stop
- echo %nftu% >> access.log
- move "D:Program FilesApache Software FoundationApache2.2logsaccess.log" "D:Program FilesApache Software FoundationApache2.2logs%nftu%_access.log"
- echo %nftu% >> error.log
- move "D:Program FilesApache Software FoundationApache2.2logserror.log" "D:Program FilesApache Software FoundationApache2.2logs%nftu%_error.log"
- "D:Program FilesApache Software FoundationApache2.2binhttpd.exe" -k start
- :: ========================================================
- :: zip todays Access and Error log files, then delete old logs
- :: ========================================================
- :: zip the files
- "D:Program Files7-Zip7z.exe" a -tzip %nftu%_logs.zip %nftu%_access.log %nftu%_error.log
- :: del the files
- del /Q %nftu%_*.log
- :: ========================================================
- :: rotate the zip files
- :: ========================================================
- :: make list of archive zip files
- type NUL > arclist.dat
- for /F "tokens=1,2 delims=[] " %%i in ('dir /B *_logs.zip ^| find /N "_logs.zip"') do echo %%i = %%j>> arclist.dat
- :: count total number of files
- for /F "tokens=1 delims=" %%i in ('type arclist.dat ^| find /C "_logs.zip"') do set tnof=%%i
- :: setup for and create the deletion list
- set /a negtk=%noatk%*-1
- set /a tntd=%tnof% - %noatk%
- type NUL>dellist.dat
- for /L %%i in (%negtk%,1,%tntd%) do find " %%i = " arclist.dat >> dellist.dat
- :: del the old files
- for /F "tokens=3 delims= " %%i in ('find "_logs.zip" dellist.dat') do del /Q %%i
- :: remove temp files
- del /Q arclist.dat
- del /Q dellist.dat
- option explicit
- const DEBUG_MODE = false
- const MAX_ROTATIONS = 10
- const MAX_SIZE = 2097152 ' 2MB
- const WEB_LOGS = "c:pathtositelogs"
- const PHP_LOG = "c:pathtophplog"
- const APACHE_LOGS = "C:pathtoApache2logs"
- const APACHE_SERVICE ="Apache2.2" ' Name of the apache service for restart
- const ZIP_APP = "c:pathtozip.exe"
- const LOGROTATE_LOG = "c:tmplogrotate.log"
- dim aLogs
- aLogs = Array("error.log","transfer.log","sec.log","phperror.log")
- dim oFSO
- set oFSO = CreateObject("Scripting.FileSystemObject")
- if (not DEBUG_MODE) then
- dim oLogFile
- set oLogFile = oFSO.CreateTextFile(LOGROTATE_LOG, 2, True)
- end if
- dim bHasRotated
- bHasRotated = false
- Print "Starting log rotation"
- Print "====================="
- ManageWebLogs()
- ManageApacheLogs()
- ManagePhpLog()
- if (bHasRotated = true) then
- Print "====================="
- RestartService APACHE_SERVICE
- end if
- Print "====================="
- Print "Log rotation finished"
- if (not DEBUG_MODE) then
- oLogFile.Close
- set oLogFile = nothing
- end if
- set oFSO = nothing
- '*****************************************************************************
- ' Loop through all the subfolders in the weblog directory
- sub ManageWebLogs()
- dim oLogDirs
- set oLogDirs = oFSO.GetFolder(WEB_LOGS)
- dim oLogDir
- for each oLogDir in oLogDirs.SubFolders
- Print "In " & oLogDir.Name
- RotateLogs(oLogDir)
- next
- set oLogDir = nothing
- end sub
- '*****************************************************************************
- ' Loop through the log files in the Apache logs directory
- sub ManageApacheLogs()
- dim oLogDir
- set oLogDir = oFSO.GetFolder(APACHE_LOGS)
- Print "In " & oLogDir.Name
- RotateLogs(oLogDir)
- set oLogDir = nothing
- end sub
- '*****************************************************************************
- ' Loop through the log files in the Apache logs directory
- sub ManagePhpLog()
- dim oLogDir
- set oLogDir = oFSO.GetFolder(PHP_LOG)
- Print "In " & oLogDir.Name
- RotateLogs(oLogDir)
- set oLogDir = nothing
- end sub
- '*****************************************************************************
- ' Traverse through each of the log file types and check if they need rotation
- sub RotateLogs(ByVal oFolder)
- dim sLog
- dim oLog
- for each sLog in aLogs
- if oFSO.FileExists(oFolder.Path & sLog) then
- set oLog = oFSO.GetFile(oFolder.Path & sLog)
- if (oLog.Size > MAX_SIZE) then
- RotateLog oFolder.Path & sLog
- ArchiveLog oFolder.Path & sLog
- bHasRotated = true
- end if
- end if
- next
- set oLog = nothing
- end sub
- '*****************************************************************************
- ' Rotates the given log, by incrementing the file name
- sub RotateLog(ByVal sLog)
- dim i
- dim sOldFile, sNewFile
- for i = MAX_ROTATIONS to 1 step -1
- sOldFile = sLog & "." & i & ".zip"
- sNewFile = sLog & "." & (i+1) & ".zip"
- if oFSO.FileExists(sOldFile) and i = MAX_ROTATIONS then
- ' Delete zipfile
- Print "-- Deleting " & sOldFile
- oFSO.DeleteFile(sOldFile)
- elseif oFSO.FileExists(sOldFile) then
- ' Rename zipfile
- Print "-- Renaming " & sOldFile & " to " & sNewFile
- oFSO.MoveFile sOldFile, sNewFile
- end if
- next
- end sub
- '*****************************************************************************
- ' Zips the current log
- sub ArchiveLog(ByVal sLog)
- Dim oShell
- Set oShell = CreateObject("WScript.Shell")
- dim sZipFile
- sZipFile = sLog & ".1.zip"
- Print "-- Archiving " & sLog & " to " & sZipFile
- oShell.Run "cmd /c " & ZIP_APP & " -jq " & sZipFile & " " & sLog, 0, true
- oFSO.DeleteFile(sLog)
- set oShell = nothing
- end sub
- ' ****************************************************************************
- ' Restarts a given service (in our case Apache)
- private sub RestartService( _
- ByVal sService _
- )
- Dim oShell
- Set oShell = CreateObject("WScript.Shell")
- ' Service stopped with 'Net' command
- oShell.Run "cmd /c net stop " & sService, 0, true
- Print sService & " service stopped"
- ' Service started with 'Net' command
- oShell.Run "cmd /c net start " & sService, 0, true
- Print sService & " service restarted"
- set oShell = nothing
- end sub
- '*****************************************************************************
- ' Echoes out the given message if in debug mode
- sub Print(ByVal sMsg)
- if (DEBUG_MODE) then
- wscript.echo sMsg
- else
- oLogFile.WriteLine sMsg
- end if
- end sub
Add Comment
Please, Sign In to add comment