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

Reply via email to