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