> I can change the code w/o using a base class of course.

Yes, I think it is better. You can safely add a property in TCustomWSocket 
as long as the component behaviour is not changed if the property is empty.

> Here's a screenshot of the logger linked to the SslHttpServer in object
> inspector.
>
> http://www.duodata.de/misc/ics_logger.png

Nice.

> Another thing is the categories and number of options available.
> I think having three different levels Err, Info, Dump
> for Wsocket, SSL and protocol specific logging should be enough,
> what do you think?

OK.

> The loDestxx options specify a destination, either to event, file
> or to OutputDebugString.

Would be interesting to have output to system log and application log.

--
[EMAIL PROTECTED]
http://www.overbyte.be

----- Original Message ----- 
From: "Arno Garrels" <[EMAIL PROTECTED]>
To: "ICS support mailing" <twsocket@elists.org>
Sent: Monday, December 26, 2005 12:08 PM
Subject: Re: [twsocket] Logging class for TWSocket


> Forgot to say that a base class eases conditional compile
> like:
>
> {$IFDEF NO_DEBUG_LOG}
>  TIcsComponent = TComponent;
> {$ELSE}
>  TIcsComponent = TIcsBaseLogComp;
> {$ENDIF}
>  TCustomWSocket = class(TIcsComponent)
>  private
>  ..
>
> If you realy think it will make problems with derived classes
> I can change the code w/o using a base class of course.
> After you know the code of the base class are still believing
> it's a problem?
>
> Another thing is the categories and number of options available.
> I think having three different levels Err, Info, Dump
> for Wsocket, SSL and protocol specific logging should be enough,
> what do you think?
>
> The loDestxx options specify a destination, either to event, file
> or to OutputDebugString.
>
> Here's a screenshot of the logger linked to the SslHttpServer in object
> inspector.
>
> http://www.duodata.de/misc/ics_logger.png
>
>
> Arno Garrels wrote:
>> Francois PIETTE wrote:
>>>> A TIcsLogger could be linked to the ICS components
>>>
>>> Arno,
>>>
>>> I don't know how you intend to implement your logging classe but your
>>> last messages about compiler trouble make me thinking you are planning 
>>> to
>>> change TWSocket base class to add logging feature.
>>>
>>> I don't think it is the right way to do it. It would probably cause a 
>>> lot
>>> of trouble in many TWSocket derived classes. It is probably much better
>>> to add a property to TCustomWSocket, maybe :
>>>     FLoggerClass : TIcsLogger;
>>> If this property is not assigned, the component behave as usual. If the
>>> property is assigned, the component start logging using the logger 
>>> class.
>>>
>>> What do you think ?
>>
>> Yes exactly, this is what I've done a component TIcsLogger.
>>
>> *However, in order to save a lot duplicated code implementing the new
>> property "IcsLogger" I made in fact a new tiny base class, but so far
>> there's no problem with derived classes, base class below.
>>
>>
>> TIcsBaseLogComp = class(TComponent)
>>     protected
>>         FIcsLogger  : TIcsLogger;
>>         procedure   SetIcsLogger(const Value : TIcsLogger); virtual;
>>         procedure   Notification(AComponent  : TComponent;
>>                                  Operation   : TOperation); override;
>>     public
>>         procedure   DebugLog(LogOption : TLogOption;
>>                              const Msg : string); virtual;
>>         function    CheckLogOptions(const LogOption: TLogOption):
>> Boolean; virtual;     published
>>         property    IcsLogger : TIcsLogger                read 
>> FIcsLogger
>>                                                           write
>> SetIcsLogger;     end;
>>
>> { TIcsLogComp }
>>
>> {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>> * *}
>>
>> function TIcsBaseLogComp.CheckLogOptions(const LogOption: TLogOption):
>> Boolean; begin
>>     Result := Assigned(FIcsLogger) and (LogOption in
>> FIcsLogger.LogOptions); end;
>>
>>
>> {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>> * *} procedure TIcsBaseLogComp.DebugLog(LogOption: TLogOption; const Msg:
>> string); begin
>>     if Assigned(FIcsLogger) then
>>         if loAddStamp in FIcsLogger.FLogOptions then
>>             FIcsLogger.DoDebugLog(Self, LogOption,
>>                                   IcsLoggerAddTimeStamp + ' ' + Msg)
>>         else
>>             FIcsLogger.DoDebugLog(Self, LogOption, Msg);
>> end;
>>
>>
>> {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>> * *} procedure TIcsBaseLogComp.Notification(AComponent: TComponent;
>>   Operation: TOperation);
>> begin
>>     inherited Notification(AComponent, Operation);
>>     if Operation = opRemove then begin
>>         if AComponent = FIcsLogger then
>>             FIcsLogger := nil;
>>     end;
>> end;
>>
>>
>> {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>> * *} procedure TIcsBaseLogComp.SetIcsLogger(const Value: TIcsLogger);
>> begin
>>     FIcsLogger := Value;
>>     if Value <> nil then
>>         Value.FreeNotification(Self);
>> end;
>>
>>
>> {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>> * *}
>>
>>>
>>> --
>>> [EMAIL PROTECTED]
>>> http://www.overbyte.be
> -- 
> To unsubscribe or change your settings for TWSocket mailing list
> please goto http://www.elists.org/mailman/listinfo/twsocket
> Visit our website at http://www.overbyte.be 

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to