You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by ni...@apache.org on 2005/07/22 21:44:14 UTC

cvs commit: logging-log4net/src/Core LoggingEvent.cs

nicko       2005/07/22 12:44:14

  Modified:    src/Core LoggingEvent.cs
  Log:
  Fix LOG4NET-42: Serialised LoggingEvent does not preserve the Fix flags. Added new constructors to allow FixFlags to be passed in with the LoggingEventData
  
  Revision  Changes    Path
  1.21      +49 -3     logging-log4net/src/Core/LoggingEvent.cs
  
  Index: LoggingEvent.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Core/LoggingEvent.cs,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- LoggingEvent.cs	3 Apr 2005 18:07:17 -0000	1.20
  +++ LoggingEvent.cs	22 Jul 2005 19:44:14 -0000	1.21
  @@ -340,6 +340,7 @@
   		/// the stack boundary into the logging system for this call.</param>
   		/// <param name="repository">The repository this event is logged in.</param>
   		/// <param name="data">Data used to initialize the logging event.</param>
  +		/// <param name="fixedData">The fields in the <paranref name="data"/> struct that have already been fixed.</param>
   		/// <remarks>
   		/// <para>
   		/// This constructor is provided to allow a <see cref="LoggingEvent" />
  @@ -348,20 +349,30 @@
   		/// </para>
   		/// <para>
   		/// Use the <see cref="GetLoggingEventData"/> method to obtain an 
  -		/// instance of the <see cref="LoggingEventData"/> class.</para>
  +		/// instance of the <see cref="LoggingEventData"/> class.
  +		/// </para>
  +		/// <para>
  +		/// The <paramref name="fixedData"/> parameter should be used to specify which fields in the
  +		/// <paramref name="data"/> struct have been preset. Fields not specified in the <paramref name="fixedData"/>
  +		/// will be captured from the environment if requested or fixed.
  +		/// </para>
   		/// </remarks>
  -		public LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data) 
  +		public LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data, FixFlags fixedData) 
   		{
   			m_callerStackBoundaryDeclaringType = callerStackBoundaryDeclaringType;
   			m_repository = repository;
   
   			m_data = data;
  +			m_fixFlags = fixedData;
   		}
   
   		/// <summary>
   		/// Initializes a new instance of the <see cref="LoggingEvent" /> class 
   		/// using specific data.
   		/// </summary>
  +		/// <param name="callerStackBoundaryDeclaringType">The declaring type of the method that is
  +		/// the stack boundary into the logging system for this call.</param>
  +		/// <param name="repository">The repository this event is logged in.</param>
   		/// <param name="data">Data used to initialize the logging event.</param>
   		/// <remarks>
   		/// <para>
  @@ -371,7 +382,38 @@
   		/// </para>
   		/// <para>
   		/// Use the <see cref="GetLoggingEventData"/> method to obtain an 
  -		/// instance of the <see cref="LoggingEventData"/> class.</para>
  +		/// instance of the <see cref="LoggingEventData"/> class.
  +		/// </para>
  +		/// <para>
  +		/// This constructor sets this objects <see cref="Fix"/> flags to <see cref="FixFlags.All"/>,
  +		/// this assumes that all the data relating to this event is passed in via the <paramref name="data"/>
  +		/// parameter and no other data should be captured from the environment.
  +		/// </para>
  +		/// </remarks>
  +		public LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data) : this(callerStackBoundaryDeclaringType, repository, data, FixFlags.All)
  +		{
  +		}
  +
  +		/// <summary>
  +		/// Initializes a new instance of the <see cref="LoggingEvent" /> class 
  +		/// using specific data.
  +		/// </summary>
  +		/// <param name="data">Data used to initialize the logging event.</param>
  +		/// <remarks>
  +		/// <para>
  +		/// This constructor is provided to allow a <see cref="LoggingEvent" />
  +		/// to be created independently of the log4net framework. This can
  +		/// be useful if you require a custom serialization scheme.
  +		/// </para>
  +		/// <para>
  +		/// Use the <see cref="GetLoggingEventData"/> method to obtain an 
  +		/// instance of the <see cref="LoggingEventData"/> class.
  +		/// </para>
  +		/// <para>
  +		/// This constructor sets this objects <see cref="Fix"/> flags to <see cref="FixFlags.All"/>,
  +		/// this assumes that all the data relating to this event is passed in via the <paramref name="data"/>
  +		/// parameter and no other data should be captured from the environment.
  +		/// </para>
   		/// </remarks>
   		public LoggingEvent(LoggingEventData data) : this(null, null, data)
   		{
  @@ -414,6 +456,10 @@
   			m_data.Properties = (PropertiesDictionary) info.GetValue("Properties", typeof(PropertiesDictionary));
   			m_data.Domain = info.GetString("Domain");
   			m_data.Identity = info.GetString("Identity");
  +
  +			// We have restored all the values of this instance, i.e. all the values are fixed
  +			// Set the fix flags otherwise the data values may be overwritten from the current environment.
  +			m_fixFlags = FixFlags.All;
   		}
   
   #endif