Delete log file entries based on the Date/Timestamp within log file

If a log file is in the following format

28-Jul-10 ::: Log message
28-Jul-10 ::: Log message
29-Jul-10 ::: Log message
30-Jul-10 ::: Log message
31-Jul-10 ::: Log message
31-Jul-10 ::: Log message
1-Aug-10 ::: Log message
1-Aug-10 ::: Log message
2-Aug-10 ::: Log message
2-Aug-10 ::: Log message
4-Aug-10 ::: Log message
4-Aug-10 ::: Log message

How can we delete only the lines which are having date/time entries, which are 2 days earlier from today's date..?

eg:
In this log, i only need to keep till 2 dates from today
2-Aug-10 ::: Log message
2-Aug-10 ::: Log message
4-Aug-10 ::: Log message
4-Aug-10 ::: Log message
and delete the rest of the lines before that.

The code will be more robust, if you use external modules for date manipulation.

perl -i.~ -MTime::Local -ane'BEGIN {
  @months{
    qw(
        Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
        )
    } = 1 .. 12;
  
  ( $day, $month, $year ) = (localtime)[ 3 .. 5 ];
  
  $my_dt = timelocal( 0, 0, 0, $day, $month, $year ) - 2 * 60 * 60 * 24;
  }
  
  @dt = split /-/, $F[0];
  
  print 
    if timelocal( 0, 0, 0, $dt[0], $months{ $dt[1] } - 1, $dt[2] ) 
      >= 
      $my_dt
  
  ' logfile

Is there any other simpler ways(using grep, sed.,etc) to do the same in shell script ..?

Yes,
if you have the GNU date program (i.e. if you're on Linux or you can install it yourself).
Otherwise, as far as I know, there is no simpler way.