ceki        2002/10/21 16:20:34

  Modified:    src/java/org/apache/log4j/spi LoggingEvent.java
  Log:
  Another formatting test. Tabs turned off this time.
  
  Revision  Changes    Path
  1.34      +372 -372  jakarta-log4j/src/java/org/apache/log4j/spi/LoggingEvent.java
  
  Index: LoggingEvent.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/spi/LoggingEvent.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- LoggingEvent.java 21 Oct 2002 23:02:48 -0000      1.33
  +++ LoggingEvent.java 21 Oct 2002 23:20:34 -0000      1.34
  @@ -34,379 +34,379 @@
      @since 0.8.2 */
   public class LoggingEvent implements java.io.Serializable {
   
  -     private static long startTime = System.currentTimeMillis();
  +  private static long startTime = System.currentTimeMillis();
   
  -     /** Fully qualified name of the calling category class. */
  -     transient public final String fqnOfCategoryClass;
  +  /** Fully qualified name of the calling category class. */
  +  transient public final String fqnOfCategoryClass;
   
  -     /** 
  -      * The category of the logging event. This field is not serialized
  -      * for performance reasons.
  -      *
  -      * <p>It is set by the LoggingEvent constructor or set by a remote
  -      * entity after deserialization.
  -      * 
  -      * @deprecated This field will be marked as private or be completely
  -      * removed in future releases. Please do not use it.
  -      * */
  -     transient private Category logger;
  -
  -     /** 
  -      * <p>The category (logger) name.
  -      *   
  -      * @deprecated This field will be marked as private in future
  -      * releases. Please do not access it directly. Use the {@link
  -      * #getLoggerName} method instead.
  -     
  -      * */
  -     final public String categoryName;
  -
  -     /** 
  -      * Level of logging event. Level cannot be serializable because it
  -      * is a flyweight.  Due to its special seralization it cannot be
  -      * declared final either.
  -      *   
  -      * <p> This field should not be accessed directly. You shoud use the
  -      * {@link #getLevel} method instead.
  -      *
  -      * @deprecated This field will be marked as private in future
  -      * releases. Please do not access it directly. Use the {@link
  -      * #getLevel} method instead.
  -      * */
  -     transient public Priority level;
  -
  -     /** The nested diagnostic context (NDC) of logging event. */
  -     private String ndc;
  -
  -     /** The mapped diagnostic context (MDC) of logging event. */
  -     private Hashtable mdcCopy;
  -
  -     /** Have we tried to do an NDC lookup? If we did, there is no need
  -      *  to do it again.  Note that its value is always false when
  -      *  serialized. Thus, a receiving SocketNode will never use it's own
  -      *  (incorrect) NDC. See also writeObject method. */
  -     private boolean ndcLookupRequired = true;
  -
  -     /** Have we tried to do an MDC lookup? If we did, there is no need
  -      *  to do it again.  Note that its value is always false when
  -      *  serialized. See also the getMDC and getMDCCopy methods.  */
  -     private boolean mdcCopyLookupRequired = true;
  -
  -     /** The application supplied message of logging event. */
  -     transient private Object message;
  -
  -     /** The application supplied message rendered through the log4j
  -         objet rendering mechanism.*/
  -     private String renderedMessage;
  -
  -     /** The name of thread in which this logging event was generated. */
  -     private String threadName;
  -
  -     /** This
  -         variable contains information about this event's throwable
  -     */
  -     private ThrowableInformation throwableInfo;
  -
  -     /** The number of milliseconds elapsed from 1/1/1970 until logging event
  -         was created. */
  -     public final long timeStamp;
  -     /** Location information for the caller. */
  -     private LocationInfo locationInfo;
  -
  -     // Serialization
  -     static final long serialVersionUID = -868428216207166145L;
  -
  -     static final Integer[] PARAM_ARRAY = new Integer[1];
  -     static final String TO_LEVEL = "toLevel";
  -     static final Class[] TO_LEVEL_PARAMS = new Class[] { int.class };
  -     static final Hashtable methodCache = new Hashtable(3); // use a tiny table
  -
  -     /**
  -        Instantiate a LoggingEvent from the supplied parameters.
  -     
  -        <p>Except {@link #timeStamp} all the other fields of
  -        <code>LoggingEvent</code> are filled when actually needed.
  -        <p>
  -        @param category The category of this event.
  -        @param level The level of this event.
  -        @param message  The message of this event.
  -        @param throwable The throwable of this event.  */
  -     public LoggingEvent(
  -             String fqnOfCategoryClass,
  -             Category logger,
  -             Priority priority,
  -             Object message,
  -             Throwable throwable) {
  -             this.fqnOfCategoryClass = fqnOfCategoryClass;
  -             this.logger = logger;
  -             this.categoryName = logger.getName();
  -             this.level = priority;
  -             this.message = message;
  -             if (throwable != null) {
  -                     this.throwableInfo = new ThrowableInformation(throwable);
  -             }
  -             timeStamp = System.currentTimeMillis();
  -     }
  -
  -     /**
  -        Instantiate a LoggingEvent from the supplied parameters.
  -     
  -        <p>Except {@link #timeStamp} all the other fields of
  -        <code>LoggingEvent</code> are filled when actually needed.
  -        <p>
  -        @param category The category of this event.
  -        @param timeStamp the timestamp of this logging event
  -        @param level The level of this event.
  -        @param message  The message of this event.
  -        @param throwable The throwable of this event.  */
  -     public LoggingEvent(
  -             String fqnOfCategoryClass,
  -             Category logger,
  -             long timeStamp,
  -             Priority priority,
  -             Object message,
  -             Throwable throwable) {
  -             this.fqnOfCategoryClass = fqnOfCategoryClass;
  -             this.logger = logger;
  -             this.categoryName = logger.getName();
  -             this.level = priority;
  -             this.message = message;
  -             if (throwable != null) {
  -                     this.throwableInfo = new ThrowableInformation(throwable);
  -             }
  -
  -             this.timeStamp = timeStamp;
  -     }
  -
  -     /**
  -        Set the location information for this logging event. The collected
  -        information is cached for future use.
  -      */
  -     public LocationInfo getLocationInformation() {
  -             if (locationInfo == null) {
  -                     locationInfo = new LocationInfo(new Throwable(), 
fqnOfCategoryClass);
  -             }
  -             return locationInfo;
  -     }
  -
  -     /**
  -      * Return the level of this event. Use this form instead of directly
  -      * accessing the <code>level</code> field.  */
  -     public Level getLevel() {
  -             return (Level) level;
  -     }
  -
  -     /**
  -      * Return the name of the logger. Use this form instead of directly
  -      * accessing the <code>categoryName</code> field.  
  -      */
  -     public String getLoggerName() {
  -             return categoryName;
  -     }
  -
  -     /**
  -        Return the message for this logging event.
  -     
  -        <p>Before serialization, the returned object is the message
  -        passed by the user to generate the logging event. After
  -        serialization, the returned value equals the String form of the
  -        message possibly after object rendering.
  -     
  -        @since 1.1 */
  -     public Object getMessage() {
  -             if (message != null) {
  -                     return message;
  -             } else {
  -                     return getRenderedMessage();
  -             }
  -     }
  -
  -     /**
  -      * This method returns the NDC for this event. It will return the
  -      * correct content even if the event was generated in a different
  -      * thread or even on a different machine. The {@link NDC#get} method
  -      * should <em>never</em> be called directly.  */
  -     public String getNDC() {
  -             if (ndcLookupRequired) {
  -                     ndcLookupRequired = false;
  -                     ndc = NDC.get();
  -             }
  -             return ndc;
  -     }
  -
  -     /**
  -         Returns the the context corresponding to the <code>key</code>
  -         parameter. If there is a local MDC copy, possibly because we are
  -         in a logging server or running inside AsyncAppender, then we
  -         search for the key in MDC copy, if a value is found it is
  -         returned. Otherwise, if the search in MDC copy returns a null
  -         result, then the current thread's <code>MDC</code> is used.
  -         
  -         <p>Note that <em>both</em> the local MDC copy and the current
  -         thread's MDC are searched.
  -     
  -     */
  -     public Object getMDC(String key) {
  -             Object r;
  -             // Note the mdcCopy is used if it exists. Otherwise we use the MDC
  -             // that is associated with the thread.
  -             if (mdcCopy != null) {
  -                     r = mdcCopy.get(key);
  -                     if (r != null) {
  -                             return r;
  -                     }
  -             }
  -             return MDC.get(key);
  -     }
  -
  -     /**
  -        Obtain a copy of this thread's MDC prior to serialization or
  -        asynchronous logging.  
  -     */
  -     public void getMDCCopy() {
  -             if (mdcCopyLookupRequired) {
  -                     mdcCopyLookupRequired = false;
  -                     // the clone call is required for asynchronous logging.
  -                     // See also bug #5932.
  -                     Hashtable t = (Hashtable) MDC.getContext();
  -                     if (t != null) {
  -                             mdcCopy = (Hashtable) t.clone();
  -                     }
  -             }
  -     }
  -
  -     public String getRenderedMessage() {
  -             if (renderedMessage == null && message != null) {
  -                     if (message instanceof String)
  -                             renderedMessage = (String) message;
  -                     else {
  -                             LoggerRepository repository = logger.getHierarchy();
  -
  -                             if (repository instanceof RendererSupport) {
  -                                     RendererSupport rs = (RendererSupport) 
repository;
  -                                     renderedMessage = 
rs.getRendererMap().findAndRender(message);
  -                             } else {
  -                                     renderedMessage = message.toString();
  -                             }
  -                     }
  -             }
  -             return renderedMessage;
  -     }
  -
  -     /**
  -        Returns the time when the application started, in milliseconds
  -        elapsed since 01.01.1970.  */
  -     public static long getStartTime() {
  -             return startTime;
  -     }
  -
  -     public String getThreadName() {
  -             if (threadName == null)
  -                     threadName = (Thread.currentThread()).getName();
  -             return threadName;
  -     }
  -
  -     /**
  -        Returns the throwable information contained within this
  -        event. May be <code>null</code> if there is no such information.
  -     
  -        <p>Note that the {@link Throwable} object contained within a
  -        {@link ThrowableInformation} does not survive serialization.
  -     
  -        @since 1.1 */
  -     public ThrowableInformation getThrowableInformation() {
  -             return throwableInfo;
  -     }
  -
  -     /**
  -        Return this event's throwable's string[] representaion.
  -     */
  -     public String[] getThrowableStrRep() {
  -
  -             if (throwableInfo == null)
  -                     return null;
  -             else
  -                     return throwableInfo.getThrowableStrRep();
  -     }
  -
  -     private void readLevel(ObjectInputStream ois)
  -             throws java.io.IOException, ClassNotFoundException {
  -
  -             int p = ois.readInt();
  -             try {
  -                     String className = (String) ois.readObject();
  -                     if (className == null) {
  -                             level = Level.toLevel(p);
  -                     } else {
  -                             Method m = (Method) methodCache.get(className);
  -                             if (m == null) {
  -                                     Class clazz = Loader.loadClass(className);
  -                                     // Note that we use Class.getDeclaredMethod 
instead of
  -                                     // Class.getMethod. This assumes that the 
Level subclass
  -                                     // implements the toLevel(int) method which is 
a
  -                                     // requirement. Actually, it does not make 
sense for Level
  -                                     // subclasses NOT to implement this method. 
Also note that
  -                                     // only Level can be subclassed and not 
Priority.
  -                                     m = clazz.getDeclaredMethod(TO_LEVEL, 
TO_LEVEL_PARAMS);
  -                                     methodCache.put(className, m);
  -                             }
  -                             PARAM_ARRAY[0] = new Integer(p);
  -                             level = (Level) m.invoke(null, PARAM_ARRAY);
  -                     }
  -             } catch (Exception e) {
  -                     LogLog.warn("Level deserialization failed, reverting to 
default.", e);
  -                     level = Level.toLevel(p);
  -             }
  -     }
  -
  -     private void readObject(ObjectInputStream ois)
  -             throws java.io.IOException, ClassNotFoundException {
  -             ois.defaultReadObject();
  -             readLevel(ois);
  -
  -             // Make sure that no location info is available to Layouts
  -             if (locationInfo == null)
  -                     locationInfo = new LocationInfo(null, null);
  -     }
  -
  -     private void writeObject(ObjectOutputStream oos) throws java.io.IOException {
  -             // Aside from returning the current thread name the wgetThreadName
  -             // method sets the threadName variable.
  -             this.getThreadName();
  -
  -             // This sets the renders the message in case it wasn't up to now.
  -             this.getRenderedMessage();
  -
  -             // This call has a side effect of setting this.ndc and
  -             // setting ndcLookupRequired to false if not already false.
  -             this.getNDC();
  -
  -             // This call has a side effect of setting this.mdcCopy and
  -             // setting mdcLookupRequired to false if not already false.
  -             this.getMDCCopy();
  -
  -             // This sets the throwable sting representation of the event throwable.
  -             this.getThrowableStrRep();
  -
  -             oos.defaultWriteObject();
  -
  -             // serialize this event's level
  -             writeLevel(oos);
  -     }
  -
  -     private void writeLevel(ObjectOutputStream oos) throws java.io.IOException {
  -
  -             oos.writeInt(level.toInt());
  -
  -             Class clazz = level.getClass();
  -             if (clazz == Level.class) {
  -                     oos.writeObject(null);
  -             } else {
  -                     // writing directly the Class object would be nicer, except 
that
  -                     // serialized a Class object can not be read back by JDK
  -                     // 1.1.x. We have to resort to this hack instead.
  -                     oos.writeObject(clazz.getName());
  -             }
  -     }
  +  /** 
  +   * The category of the logging event. This field is not serialized
  +   * for performance reasons.
  +   *
  +   * <p>It is set by the LoggingEvent constructor or set by a remote
  +   * entity after deserialization.
  +   * 
  +   * @deprecated This field will be marked as private or be completely
  +   * removed in future releases. Please do not use it.
  +   * */
  +  transient private Category logger;
  +
  +  /** 
  +   * <p>The category (logger) name.
  +   *   
  +   * @deprecated This field will be marked as private in future
  +   * releases. Please do not access it directly. Use the {@link
  +   * #getLoggerName} method instead.
  +  
  +   * */
  +  final public String categoryName;
  +
  +  /** 
  +   * Level of logging event. Level cannot be serializable because it
  +   * is a flyweight.  Due to its special seralization it cannot be
  +   * declared final either.
  +   *   
  +   * <p> This field should not be accessed directly. You shoud use the
  +   * {@link #getLevel} method instead.
  +   *
  +   * @deprecated This field will be marked as private in future
  +   * releases. Please do not access it directly. Use the {@link
  +   * #getLevel} method instead.
  +   * */
  +  transient public Priority level;
  +
  +  /** The nested diagnostic context (NDC) of logging event. */
  +  private String ndc;
  +
  +  /** The mapped diagnostic context (MDC) of logging event. */
  +  private Hashtable mdcCopy;
  +
  +  /** Have we tried to do an NDC lookup? If we did, there is no need
  +   *  to do it again.  Note that its value is always false when
  +   *  serialized. Thus, a receiving SocketNode will never use it's own
  +   *  (incorrect) NDC. See also writeObject method. */
  +  private boolean ndcLookupRequired = true;
  +
  +  /** Have we tried to do an MDC lookup? If we did, there is no need
  +   *  to do it again.  Note that its value is always false when
  +   *  serialized. See also the getMDC and getMDCCopy methods.  */
  +  private boolean mdcCopyLookupRequired = true;
  +
  +  /** The application supplied message of logging event. */
  +  transient private Object message;
  +
  +  /** The application supplied message rendered through the log4j
  +      objet rendering mechanism.*/
  +  private String renderedMessage;
  +
  +  /** The name of thread in which this logging event was generated. */
  +  private String threadName;
  +
  +  /** This
  +      variable contains information about this event's throwable
  +  */
  +  private ThrowableInformation throwableInfo;
  +
  +  /** The number of milliseconds elapsed from 1/1/1970 until logging event
  +      was created. */
  +  public final long timeStamp;
  +  /** Location information for the caller. */
  +  private LocationInfo locationInfo;
  +
  +  // Serialization
  +  static final long serialVersionUID = -868428216207166145L;
  +
  +  static final Integer[] PARAM_ARRAY = new Integer[1];
  +  static final String TO_LEVEL = "toLevel";
  +  static final Class[] TO_LEVEL_PARAMS = new Class[] { int.class };
  +  static final Hashtable methodCache = new Hashtable(3); // use a tiny table
  +
  +  /**
  +     Instantiate a LoggingEvent from the supplied parameters.
  +  
  +     <p>Except {@link #timeStamp} all the other fields of
  +     <code>LoggingEvent</code> are filled when actually needed.
  +     <p>
  +     @param category The category of this event.
  +     @param level The level of this event.
  +     @param message  The message of this event.
  +     @param throwable The throwable of this event.  */
  +  public LoggingEvent(
  +    String fqnOfCategoryClass,
  +    Category logger,
  +    Priority priority,
  +    Object message,
  +    Throwable throwable) {
  +    this.fqnOfCategoryClass = fqnOfCategoryClass;
  +    this.logger = logger;
  +    this.categoryName = logger.getName();
  +    this.level = priority;
  +    this.message = message;
  +    if (throwable != null) {
  +      this.throwableInfo = new ThrowableInformation(throwable);
  +    }
  +    timeStamp = System.currentTimeMillis();
  +  }
  +
  +  /**
  +     Instantiate a LoggingEvent from the supplied parameters.
  +  
  +     <p>Except {@link #timeStamp} all the other fields of
  +     <code>LoggingEvent</code> are filled when actually needed.
  +     <p>
  +     @param category The category of this event.
  +     @param timeStamp the timestamp of this logging event
  +     @param level The level of this event.
  +     @param message  The message of this event.
  +     @param throwable The throwable of this event.  */
  +  public LoggingEvent(
  +    String fqnOfCategoryClass,
  +    Category logger,
  +    long timeStamp,
  +    Priority priority,
  +    Object message,
  +    Throwable throwable) {
  +    this.fqnOfCategoryClass = fqnOfCategoryClass;
  +    this.logger = logger;
  +    this.categoryName = logger.getName();
  +    this.level = priority;
  +    this.message = message;
  +    if (throwable != null) {
  +      this.throwableInfo = new ThrowableInformation(throwable);
  +    }
  +
  +    this.timeStamp = timeStamp;
  +  }
  +
  +  /**
  +     Set the location information for this logging event. The collected
  +     information is cached for future use.
  +   */
  +  public LocationInfo getLocationInformation() {
  +    if (locationInfo == null) {
  +      locationInfo = new LocationInfo(new Throwable(), fqnOfCategoryClass);
  +    }
  +    return locationInfo;
  +  }
  +
  +  /**
  +   * Return the level of this event. Use this form instead of directly
  +   * accessing the <code>level</code> field.  */
  +  public Level getLevel() {
  +    return (Level) level;
  +  }
  +
  +  /**
  +   * Return the name of the logger. Use this form instead of directly
  +   * accessing the <code>categoryName</code> field.  
  +   */
  +  public String getLoggerName() {
  +    return categoryName;
  +  }
  +
  +  /**
  +     Return the message for this logging event.
  +  
  +     <p>Before serialization, the returned object is the message
  +     passed by the user to generate the logging event. After
  +     serialization, the returned value equals the String form of the
  +     message possibly after object rendering.
  +  
  +     @since 1.1 */
  +  public Object getMessage() {
  +    if (message != null) {
  +      return message;
  +    } else {
  +      return getRenderedMessage();
  +    }
  +  }
  +
  +  /**
  +   * This method returns the NDC for this event. It will return the
  +   * correct content even if the event was generated in a different
  +   * thread or even on a different machine. The {@link NDC#get} method
  +   * should <em>never</em> be called directly.  */
  +  public String getNDC() {
  +    if (ndcLookupRequired) {
  +      ndcLookupRequired = false;
  +      ndc = NDC.get();
  +    }
  +    return ndc;
  +  }
  +
  +  /**
  +      Returns the the context corresponding to the <code>key</code>
  +      parameter. If there is a local MDC copy, possibly because we are
  +      in a logging server or running inside AsyncAppender, then we
  +      search for the key in MDC copy, if a value is found it is
  +      returned. Otherwise, if the search in MDC copy returns a null
  +      result, then the current thread's <code>MDC</code> is used.
  +      
  +      <p>Note that <em>both</em> the local MDC copy and the current
  +      thread's MDC are searched.
  +  
  +  */
  +  public Object getMDC(String key) {
  +    Object r;
  +    // Note the mdcCopy is used if it exists. Otherwise we use the MDC
  +    // that is associated with the thread.
  +    if (mdcCopy != null) {
  +      r = mdcCopy.get(key);
  +      if (r != null) {
  +        return r;
  +      }
  +    }
  +    return MDC.get(key);
  +  }
  +
  +  /**
  +     Obtain a copy of this thread's MDC prior to serialization or
  +     asynchronous logging.  
  +  */
  +  public void getMDCCopy() {
  +    if (mdcCopyLookupRequired) {
  +      mdcCopyLookupRequired = false;
  +      // the clone call is required for asynchronous logging.
  +      // See also bug #5932.
  +      Hashtable t = (Hashtable) MDC.getContext();
  +      if (t != null) {
  +        mdcCopy = (Hashtable) t.clone();
  +      }
  +    }
  +  }
  +
  +  public String getRenderedMessage() {
  +    if (renderedMessage == null && message != null) {
  +      if (message instanceof String)
  +        renderedMessage = (String) message;
  +      else {
  +        LoggerRepository repository = logger.getHierarchy();
  +
  +        if (repository instanceof RendererSupport) {
  +          RendererSupport rs = (RendererSupport) repository;
  +          renderedMessage = rs.getRendererMap().findAndRender(message);
  +        } else {
  +          renderedMessage = message.toString();
  +        }
  +      }
  +    }
  +    return renderedMessage;
  +  }
  +
  +  /**
  +     Returns the time when the application started, in milliseconds
  +     elapsed since 01.01.1970.  */
  +  public static long getStartTime() {
  +    return startTime;
  +  }
  +
  +  public String getThreadName() {
  +    if (threadName == null)
  +      threadName = (Thread.currentThread()).getName();
  +    return threadName;
  +  }
  +
  +  /**
  +     Returns the throwable information contained within this
  +     event. May be <code>null</code> if there is no such information.
  +  
  +     <p>Note that the {@link Throwable} object contained within a
  +     {@link ThrowableInformation} does not survive serialization.
  +  
  +     @since 1.1 */
  +  public ThrowableInformation getThrowableInformation() {
  +    return throwableInfo;
  +  }
  +
  +  /**
  +     Return this event's throwable's string[] representaion.
  +  */
  +  public String[] getThrowableStrRep() {
  +
  +    if (throwableInfo == null)
  +      return null;
  +    else
  +      return throwableInfo.getThrowableStrRep();
  +  }
  +
  +  private void readLevel(ObjectInputStream ois)
  +    throws java.io.IOException, ClassNotFoundException {
  +
  +    int p = ois.readInt();
  +    try {
  +      String className = (String) ois.readObject();
  +      if (className == null) {
  +        level = Level.toLevel(p);
  +      } else {
  +        Method m = (Method) methodCache.get(className);
  +        if (m == null) {
  +          Class clazz = Loader.loadClass(className);
  +          // Note that we use Class.getDeclaredMethod instead of
  +          // Class.getMethod. This assumes that the Level subclass
  +          // implements the toLevel(int) method which is a
  +          // requirement. Actually, it does not make sense for Level
  +          // subclasses NOT to implement this method. Also note that
  +          // only Level can be subclassed and not Priority.
  +          m = clazz.getDeclaredMethod(TO_LEVEL, TO_LEVEL_PARAMS);
  +          methodCache.put(className, m);
  +        }
  +        PARAM_ARRAY[0] = new Integer(p);
  +        level = (Level) m.invoke(null, PARAM_ARRAY);
  +      }
  +    } catch (Exception e) {
  +      LogLog.warn("Level deserialization failed, reverting to default.", e);
  +      level = Level.toLevel(p);
  +    }
  +  }
  +
  +  private void readObject(ObjectInputStream ois)
  +    throws java.io.IOException, ClassNotFoundException {
  +    ois.defaultReadObject();
  +    readLevel(ois);
  +
  +    // Make sure that no location info is available to Layouts
  +    if (locationInfo == null)
  +      locationInfo = new LocationInfo(null, null);
  +  }
  +
  +  private void writeObject(ObjectOutputStream oos) throws java.io.IOException {
  +    // Aside from returning the current thread name the wgetThreadName
  +    // method sets the threadName variable.
  +    this.getThreadName();
  +
  +    // This sets the renders the message in case it wasn't up to now.
  +    this.getRenderedMessage();
  +
  +    // This call has a side effect of setting this.ndc and
  +    // setting ndcLookupRequired to false if not already false.
  +    this.getNDC();
  +
  +    // This call has a side effect of setting this.mdcCopy and
  +    // setting mdcLookupRequired to false if not already false.
  +    this.getMDCCopy();
  +
  +    // This sets the throwable sting representation of the event throwable.
  +    this.getThrowableStrRep();
  +
  +    oos.defaultWriteObject();
  +
  +    // serialize this event's level
  +    writeLevel(oos);
  +  }
  +
  +  private void writeLevel(ObjectOutputStream oos) throws java.io.IOException {
  +
  +    oos.writeInt(level.toInt());
  +
  +    Class clazz = level.getClass();
  +    if (clazz == Level.class) {
  +      oos.writeObject(null);
  +    } else {
  +      // writing directly the Class object would be nicer, except that
  +      // serialized a Class object can not be read back by JDK
  +      // 1.1.x. We have to resort to this hack instead.
  +      oos.writeObject(clazz.getName());
  +    }
  +  }
   
   }
  
  
  

--
To unsubscribe, e-mail:   <mailto:log4j-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:log4j-dev-help@;jakarta.apache.org>

Reply via email to