markt       2005/03/28 10:53:19

  Modified:    catalina/src/share/org/apache/catalina/valves
                        AccessLogValve.java
  Log:
  Fix bug 20380. Timezone reported in access log should include any adjustment 
necesary
   for Daylight Saving Time.
  
  Revision  Changes    Path
  1.20      +39 -17    
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/valves/AccessLogValve.java
  
  Index: AccessLogValve.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/valves/AccessLogValve.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- AccessLogValve.java       27 Mar 2005 20:18:01 -0000      1.19
  +++ AccessLogValve.java       28 Mar 2005 18:53:19 -0000      1.20
  @@ -25,6 +25,7 @@
   import java.net.InetAddress;
   import java.text.SimpleDateFormat;
   import java.text.DecimalFormat;
  +import java.util.Calendar;
   import java.util.Date;
   import java.util.TimeZone;
   import javax.servlet.ServletException;
  @@ -265,12 +266,22 @@
        */
       private SimpleDateFormat timeFormatter = null;
   
  -
       /**
  -     * The time zone relative to GMT.
  +     * The system timezone.
  +     */
  +    private TimeZone timezone = null;
  +    
  +    /**
  +     * The time zone offset relative to GMT in text form when daylight saving
  +     * is not in operation.
        */
  -    private String timeZone = null;
  +    private String timeZoneNoDST = null;
   
  +    /**
  +     * The time zone offset relative to GMT in text form when daylight saving
  +     * is in operation.
  +     */
  +    private String timeZoneDST = null;
   
       /**
        * The system time when we last updated the Date that this valve
  @@ -570,15 +581,15 @@
               }
   
               result.append("[");
  -            result.append(dayFormatter.format(date));            // Day
  +            result.append(dayFormatter.format(date));           // Day
               result.append('/');
               result.append(lookup(monthFormatter.format(date))); // Month
               result.append('/');
  -            result.append(yearFormatter.format(date));            // Year
  +            result.append(yearFormatter.format(date));          // Year
               result.append(':');
  -            result.append(timeFormatter.format(date));        // Time
  +            result.append(timeFormatter.format(date));          // Time
               result.append(space);
  -            result.append(timeZone);                            // Time Zone
  +            result.append(getTimeZone(date));                   // Time Zone
               result.append("] \"");
   
               result.append(hreq.getMethod());
  @@ -880,7 +891,7 @@
               temp.append(':');
               temp.append(timeFormatter.format(date));            // Time
               temp.append(' ');
  -            temp.append(timeZone);                              // Timezone
  +            temp.append(getTimeZone(date));                     // Timezone
               temp.append(']');
               value = temp.toString();
           } else if (pattern == 'T') {
  @@ -999,7 +1010,15 @@
   
       }
   
  -
  +    private String getTimeZone(Date date) {
  +        if (timezone.inDaylightTime(date)) {
  +            return timeZoneDST;
  +        } else {
  +            return timeZoneNoDST;
  +        }
  +    }
  +    
  +    
       private String calculateTimeZoneOffset(long offset) {
           StringBuffer tz = new StringBuffer();
           if ((offset<0))  {
  @@ -1080,21 +1099,24 @@
           started = true;
   
           // Initialize the timeZone, Date formatters, and currentDate
  -        TimeZone tz = TimeZone.getDefault();
  -        timeZone = calculateTimeZoneOffset(tz.getRawOffset());
  +        timezone = TimeZone.getDefault();
  +        timeZoneNoDST = calculateTimeZoneOffset(timezone.getRawOffset());
  +        Calendar calendar = Calendar.getInstance(timezone);
  +        int offset = calendar.get(Calendar.DST_OFFSET);
  +        timeZoneDST = 
calculateTimeZoneOffset(timezone.getRawOffset()+offset);
   
           if (fileDateFormat==null || fileDateFormat.length()==0)
               fileDateFormat = "yyyy-MM-dd";
           dateFormatter = new SimpleDateFormat(fileDateFormat);
  -        dateFormatter.setTimeZone(tz);
  +        dateFormatter.setTimeZone(timezone);
           dayFormatter = new SimpleDateFormat("dd");
  -        dayFormatter.setTimeZone(tz);
  +        dayFormatter.setTimeZone(timezone);
           monthFormatter = new SimpleDateFormat("MM");
  -        monthFormatter.setTimeZone(tz);
  +        monthFormatter.setTimeZone(timezone);
           yearFormatter = new SimpleDateFormat("yyyy");
  -        yearFormatter.setTimeZone(tz);
  +        yearFormatter.setTimeZone(timezone);
           timeFormatter = new SimpleDateFormat("HH:mm:ss");
  -        timeFormatter.setTimeZone(tz);
  +        timeFormatter.setTimeZone(timezone);
           currentDate = new Date();
           dateStamp = dateFormatter.format(currentDate);
           timeTakenFormatter = new DecimalFormat("0.000");
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to