Jump to content

Help with trimming a LOG file


Recommended Posts

Hello everyone,

I have been a member for a while but relatively new to posting to the message boards. I am also still relatively new to using AutoIt. I am working on a script that will help keep a program running on one of my file servers.

Here is what I have accomplished so far looking at different threads on the site already.

1. A check performed every 60 seconds to see if the application is running. (ultimately to be changed to something like once an hour)

2. Write a log file that shows either the check was performed with no issue or the application had to be restarted.

Both of those are working fine and I have to say that ever since I started using this script the program has not crashed!

My next phase is to figure out how to make the script check and trim the log file. I am obviously not trying to make a log file that becomes bloated and chews up a large amount of hard drive space. The main purpose of the log file is so that I know if the application has been restarted. I am thinking have the script trim the file every 30 day maybe. Another words delete everything in the log file 30 days prior to the current day. So if someone can help me out here as I am not a scripting genius. Unfortunately I only know enough to be dangerous if you will.

I also have another part of this script I want to write but first I want to get the log file working just the way I want. I am attaching a sample of what I have working so far.

Thank you for any and all help folks.

Respectfully,

James

 

#include <File.au3>

 While 1 ;Start Loop

   If ProcessExists("atcsmon.exe") Then

   ;~ Open the logfile in write mode.

   Local $hFile = FileOpen(@ScriptDir & "\ATCS_AutoIt.log", 1)

   _FileWriteLog($hFile, "ATCS check was completed and found running by the AutoIt3 Script") ; Write to the logfile passing the filehandle returned by FileOpen.

   FileClose($hFile) ; Close the filehandle to release the file.

   Else ;If Process does not exist

   Run("C:\atcs_monitor\atcsmon.exe", "", @SW_SHOWMINIMIZED)

   ;~ Open the logfile in write mode.

   Local $hFile = FileOpen(@ScriptDir & "\ATCS_AutoIt.log", 1)

   _FileWriteLog($hFile, "*ALERT* *ALERT* *ALERT* ATCS was restarted by the AutoIt3 Script") ; Write to the logfile passing the filehandle returned by FileOpen.

   FileClose($hFile) ; Close the filehandle to release the file.

   EndIf



   Sleep(60000) ;sleep 60 seconds

 WEnd ;Close Loop

 

[font="Arial"]James D. Williams[/font]

Link to comment
Share on other sites

Perhaps you could use an INI and use a time stamp as the key.

You could use something like (untested):

#include <Date.au3>
#include <Array.au3>
$sTimeStamp = _NowCalc()
$sEvent = "Alert or Pass text"
IniWrite(@ScriptDir & "\ATCS_AutoIt.log", "Event_Log", $sTimeStamp, $sEvent)



;to delete old entries
$aIniData = IniReadSecion(@ScriptDir & "\ATCS_AutoIt.log", "Event_Log")
For $i = 0 to Ubound($aIniData) - 1
    If _DateDiff("D", $aIniData[$i][0], _NowCalc()) > 30 Then
        _ArrayDelete($aIniData, $i)
        $i -= 1 ;item $i + 1 just became item $i so go back and check the new values in array slot $i
    Else
        ExitLoop ; if the entry is newer than 30 days , stop searching
    EndIf
Next    
IniWriteSection( @ScriptDir & "\ATCS_AutoIt.log", "Event_Log", $aIniData , 1)

 

Edited by Shane0000
Added #includes
Link to comment
Share on other sites

  • Moderators

If this is a true monitoring script, why not write to the Event Viewer. You could even set up an email alert to yourself if the event matches certain criteria.

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

Shane0000 - I will look at this and give it a try I suppose I will have to "falsify" some log entries to make sure I am implementing this correctly!

JLogan3o13 - I never thought about going that rout. Well let me rephrase that. I thought about the email alert (more like a text message) if the application goes down. However I never thought about putting it into the system log. Do you have an example of how that would be done in the scripting?

Sorry I am learning as I go with this entire project.

Thank you for the help!

Respectfully,

James

[font="Arial"]James D. Williams[/font]

Link to comment
Share on other sites

  • Moderators

There are a number of different ways to do it, but In it's simplest form, you can write the event with a ShellExecute:

 

ShellExecute("EventCreate.exe", '/L Application /T Information /SO "MyApp" /ID 666 /D "My event Message"', "", "", @SW_HIDE)

 

Edited by JLogan3o13

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

You can also use the _EventLog_* functions, specifically _EventLog_Open and _EventLog_Report.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

Perhaps you could use an INI and use a time stamp as the key.

You could use something like (untested):

#include <Date.au3>
#include <Array.au3>
$sTimeStamp = _NowCalc()
$sEvent = "Alert or Pass text"
IniWrite(@ScriptDir & "\ATCS_AutoIt.log", "Event_Log", $sTimeStamp, $sEvent)



;to delete old entries
$aIniData = IniReadSecion(@ScriptDir & "\ATCS_AutoIt.log", "Event_Log")
For $i = 0 to Ubound($aIniData) - 1
    If _DateDiff("D", $aIniData[$i][0], _NowCalc()) > 30 Then
        _ArrayDelete($aIniData, $i)
        $i -= 1 ;item $i + 1 just became item $i so go back and check the new values in array slot $i
    Else
        ExitLoop ; if the entry is newer than 30 days , stop searching
    EndIf
Next    
IniWriteSection( @ScriptDir & "\ATCS_AutoIt.log", "Event_Log", $aIniData , 1)

 

Ok I tried this. and I got the following error.

Line 106 (File "C:\Users\GMS\Desktop\ATCS_UP_CHECK_REV4-temp_test.au3"):

$aIniData = IniReadSecion(@ScriptDir & "\ATCS_AutoIt.log", "Event_Log")

$aIniData = ^ ERROR

 

Error: Unknown function name.

I am not sure what the deal is with this. I suspect it has something to do with the part of the argument that has "Event_Log" in it. I did try messing with it but I didn't have any success. Shane0000, if I could get a little help debugging this I would appreciate it.

 

JLogan3o13, I have not totally thrown your suggestion out the window. I am interested in using that but mainly for the error (if the program has to be restarted) but I think I am going to hold off on that for the moment. I am also interested in using that system so that I can have the server send me an email (text) to my phone so that I know if it puked. This way I can remote in and make sure it actually came back up for me.

 

Respectfully,

James

[font="Arial"]James D. Williams[/font]

Link to comment
Share on other sites

Try IniReadSecTion(... instead.

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...