65 lines
1.1 KiB
ObjectPascal
65 lines
1.1 KiB
ObjectPascal
{
|
|
* Classes used to log messages plus a factory class. One logger class logs to
|
|
* standard error while the second does nothing.
|
|
}
|
|
|
|
|
|
unit ULogger;
|
|
|
|
interface
|
|
|
|
type
|
|
TLogger = class(TObject)
|
|
public
|
|
procedure Log(const Msg: string); virtual; abstract;
|
|
end;
|
|
|
|
type
|
|
TLoggerFactory = class(TObject)
|
|
public
|
|
class function Instance(Verbose: Boolean): TLogger;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
UAppInfo, UBDiffUtils;
|
|
|
|
type
|
|
TVerboseLogger = class(TLogger)
|
|
public
|
|
procedure Log(const Msg: string); override;
|
|
end;
|
|
|
|
type
|
|
TSilentLogger = class(TLogger)
|
|
public
|
|
procedure Log(const Msg: string); override;
|
|
end;
|
|
|
|
{ TVerboseLogger }
|
|
|
|
procedure TVerboseLogger.Log(const Msg: string);
|
|
begin
|
|
TIO.WriteStrFmt(TIO.StdErr, '%s: %s'#13#10, [TAppInfo.ProgramFileName, Msg]);
|
|
end;
|
|
|
|
{ TSilentLogger }
|
|
|
|
procedure TSilentLogger.Log(const Msg: string);
|
|
begin
|
|
// Do nothing: no output required
|
|
end;
|
|
|
|
{ TLoggerFactory }
|
|
|
|
class function TLoggerFactory.Instance(Verbose: Boolean): TLogger;
|
|
begin
|
|
if Verbose then
|
|
Result := TVerboseLogger.Create
|
|
else
|
|
Result := TSilentLogger.Create;
|
|
end;
|
|
|
|
end.
|