Clear-Host
######################################################
########File Configurations or Initialization#########
######################################################
#Update the path of the Log file. Not including the file name
#$logFilePath = "C:\Users\bobr\Desktop\LogFileParsing"
$logFilePath = "E:\APP_SERVERS\glassfish-4.1\glassfish4\glassfish\domains\walgreenmonet\logs"
#\\server1\glassfish-4.1\glassfish4\glassfish\domains\walgreenmonet\logs
#Update the Log File name with extension like server.log
$logFileName = "server.log"
$ParserFile = $logFilePath + "\" + $logFileName
$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
#Create a pattern.txt file in the location where you have placed the script and
#add all the required unique pattern to line-by-line. It does simple match.
$patternFile = $ScriptDir + "\" + "pattern.txt"
# This file will be created automatically in the initial run and
# never modify this file content which is a numerical value to track file
# line last read
$counterFile = $ScriptDir + "\" + "counterFile.log"
#File which you want to parse once it get archieved from the original source
#make sure you have a right pattern in place as it identified lastWriteTime to pick
$archivedFileNamePattern = "server.log_*"
# SMTP Relay server name
$smtp = "smtp.domain.com"
# E-mail to be sent to when the pattern matches with subject and body details
$from = "xyz@domain.com"
$to = "xyz@domain.com","abc@domain.com"
$subject = "Test Ignore: Walgreen: database connectivity issue server.log"
$body = "<B>This file contains the match found in accordance with pattern.txt file</B><BR>"
######################################################
###############End of Initialization###################
######################################################
$bodyContent = @()
$bodyContent = $bodyContent + $body
$pattern = Get-Content $patternFile
#$pattern = @("SQLException","SQL")
If ( Test-Path $counterFile )
{
$lastLine = Get-Content -Path $counterFile
}
else
{
New-Item -Path $logFilePath -Name "counterFile.log" -ItemType File
New-Item -Path $logFilePath -Name "pattern.txt" -ItemType File
$count = Get-content $ParserFile | Measure-Object
$lastLine = $count.count
$lastLine|Out-File $counterFile
}
$newCount = Get-content $ParserFile | Measure-Object
$newLine = $newCount.Count
If ( $newLine -gt $lastLine )
{
$diff_Line = $newLine - $lastLine
#Write-Host "FromLineNum:$lastLine to ToLineNum:$newLine"
$matchedContent = Get-Content $ParserFile -Tail $diff_Line | Select-String -Pattern $pattern #-SimpleMatch
#Write-Host $matchedContent
$bodyContent = $bodyContent + $matchedContent
$bodyAsString = $bodyContent | & {$ofs='<BR>';"$input"}
If ( $matchedContent )
{
#send e-mail
Send-MailMessage -From $from -To $to -Subject $subject -Body $bodyAsString -BodyAsHtml -SmtpServer $smtp
}
$lastLine = $newLine
$lastLine|Out-File $counterFile
}
ElseIF ( $newLine -lt $lastLine ) #check if a new file has been created and archiving older one with timestamp
{
#Read from the newly created file
$diff_Line = -1
#Write-Host "FromLineNum:0 to ToLineNum:$newLine"
$matchedContent = Get-Content $ParserFile -Tail $diff_Line | Select-String -Pattern $pattern #-SimpleMatch
#Write-Host $matchedContent
$bodyContent = $bodyContent + $matchedContent
# Get archived file lastline before overriding with newfile lastline
$archivedFileLastLine = $lastLine
$lastLine = $newLine
$lastLine|Out-File $counterFile
#Read the archived file to make sure we have read everything till the end of the file
#Get the archieved file name from recently modified date with a filename_*.log
$recentArchiveFileName = (Get-ChildItem -Path $logFilePath -Filter $archivedFileNamePattern |Sort-Object LastWriteTime | Select-Object -Last 1).FullName
$archievednewCount = Get-content $recentArchiveFileName | Measure-Object
$archievedNewLine = $archievednewCount.Count
if ( $archievedNewLine -gt $archivedFileLastLine )
{
$diff_Line = $archievedNewLine - $archivedFileLastLine
Write-Host "FromLineNum:$archivedFileLastLine to ToLineNum:$archievedNewLine"
$archievedMatchedContent = Get-Content $recentArchiveFileName -Tail $diff_Line | Select-String -Pattern $pattern #-SimpleMatch
#Write-Host $archievedMatchedContent
$bodyContent = $bodyContent + $archievedMatchedContent
$bodyAsString = $bodyContent | & {$ofs='<BR>';"$input"}
if ( $archievedMatchedContent )
{
#send e-mail
Send-MailMessage -From $from -To $to -Subject $subject -Body $bodyAsString -BodyAsHtml -SmtpServer $smtp
}
}
}
No comments:
Post a Comment