new content notification from a log file

Discussion in 'Ruby' started by Oliver, Nov 28, 2007.

  1. Oliver

    Oliver Guest

    dear all,

    I have the following situation that I don't have a good solution:

    One process periodically will append its output to a file (which is
    not under my control), I want to write a ruby problem to detect and
    report only the *new* stuff that went into the output file ... Besides
    the brute force way such as opening the file and counting the lines
    etc, is there a better solution to it?

    Thanks for help

    Oliver
     
    Oliver, Nov 28, 2007
    #1
    1. Advertising

  2. Oliver

    Gary Wright Guest

    On Nov 28, 2007, at 3:05 PM, Oliver wrote:
    > One process periodically will append its output to a file (which is
    > not under my control), I want to write a ruby problem to detect and
    > report only the *new* stuff that went into the output file ... Besides
    > the brute force way such as opening the file and counting the lines
    > etc, is there a better solution to it?


    You can use File.stat('filename').size to get the number of bytes in
    the file or .mtime to find the last modification time. If the bytes
    and/or time changes you can then open the file and grab the new lines.

    Gary Wright
     
    Gary Wright, Nov 28, 2007
    #2
    1. Advertising

  3. Oliver

    Oliver Guest

    Thanks to both of you for the solution.

    The double while loop seems a bit more concise, but it depends on
    File#gets method handles the changing file content correctly. I will
    give it a spin.

    Best,

    Oliver

    On Nov 28, 3:33 pm, Christian von Kleist <> wrote:
    > You can do something like this:
    >
    > f = File.new('logfile.log')
    >
    > while true
    > while(line = f.gets)
    > puts line
    > end
    > sleep 5
    > end
    >
    > On Nov 28, 2007 3:21 PM, Gary Wright <> wrote:
    >
    >
    >
    > > On Nov 28, 2007, at 3:05 PM, Oliver wrote:
    > > > One process periodically will append its output to a file (which is
    > > > not under my control), I want to write a ruby problem to detect and
    > > > report only the *new* stuff that went into the output file ... Besides
    > > > the brute force way such as opening the file and counting the lines
    > > > etc, is there a better solution to it?

    >
    > > You can use File.stat('filename').size to get the number of bytes in
    > > the file or .mtime to find the last modification time. If the bytes
    > > and/or time changes you can then open the file and grab the new lines.

    >
    > > Gary Wright
     
    Oliver, Nov 28, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page