Does your log need to be a rolling log that always contains the most recent entries, or can it simply be restarted whenever it gets too big? This make a difference in your approach. Your tail example leans more toward the former, while something like logrotate that just periodically clobbers (or archives) the file if it's too large would accomplish the latter and be much simpler.
Update: To maintain a rolling logfile, if your program is persistent during a login session, you could simply maintain the most recent data internally (using an array of individual log entries, for example, push a new entry and shift the oldest one off), then dump the entire log to file each time it's updated. Not the best for maintaining logfile integrity, but the code would be very clean.