# Daily-Session-Log # # Session log with automatic daily log file rotation. # Assumes a connection (of any kind) is already open, # e.g. to the control / logging port of a PBX, router, etc. # Note: in C-Kermit 8.0.211 you can use INPUT /NOMATCH rather # than specifying a "string that will never come". # # F. da Cruz, Columbia University, June 2004 # # Parameters for this run, change as needed. # HINT: Use forward slash (/) in Windows pathnames. .current := c:/logs/ # Directory to run in .archive := c:/archive/ # Directory to move old logs to set session-log text # Log in text mode or... set session-log timestamped-text # Do this if you want timesamps added set input echo on # If you also want display on screen # Local variables and macros local logname # Name of log file local mode # Mode in which to open it def ON_CTRLC if open session-log close session-log # Ctrl-C trap def ERRCHK if fail stop 1 "TROUBLE: \%1 - \v(errstring)" # Error handler # Check directories and CD if not directory \m(current) stop 1 "TROUBLE: \m(current) is not a directory" if not directory \m(archive) stop 1 "TROUBLE: \m(archive) is not a directory" cd \m(current) # CD to desired directory # Loop to open session log, log to it until just before midnight, then # close the log and move it to the archive directory. while true { # Loop until interrupted if open session-log close session-log # If a log is open close it .logname := \v(ndate).log # Get name for new log .mode := new # Mode in which to open it if exist \m(logname) .mode := append # If file exists append to it log session \m(logname) \m(mode) # Open the log file errchk "Open Log \m(logname)" if eq \m(mode) new { # Heading only if new file writeln session-log \v(day) \v(date) \v(time) } # Record everything that arrives until just before midnight. input 23:59:59 STRING_THAT_WILL_NEVER_COME if success stop 1 "TROUBLE: Log \m(logname) terminated early" if not open connection stop 1 "TROUBLE: Connection lost" # At midnight close the log and rotate it, taking care not to # overwrite any existing files. Assuming a reliable flow-controlled # connection, no data will be lost during log rotation. close session-log errchk "Close Log \m(logname)" if not exist \m(archive)\m(logname) { rename \m(logname) \m(archive) errchk "Rename Log \m(logname) to \m(archive)" } sleep 2 # Sleep until after midnight }