debug a reserved keyword (even for enums?)
Kagamin
spam at here.lot
Sat Apr 11 09:40:32 UTC 2026
Use pascal case.
```d
/// Message severity level
enum Level
{
/// Most verbose log level
Verbose=0,
/// ditto
Finest=0,
/// Deep debugging level, there's never enough of them
Finer=1,
/// Fine grained debugging
Fine=2,
/// Diagnostic information with technical details
Debug=3,
/// Reserve debug level when you suddenly need it
Trace=4,
/// High level event, e.g. user action
Info=5,
/// Noncritical problem
Warn=6,
/// Recoverable failure of current operation
Error=7,
/// Severe errors and other important information like program
version
Critical=8,
/// Program crash
Fatal=9,
/// Filter only
Mute=10
}
/**
Logging helper.
Examples:
---
private immutable Log=Logger(0);
Log.Debug("debug", number);
Log.Info("message");
Log.Warn("failure", errorCode);
Log.Error("system error", errorCode);
---
*/
struct Logger
{
/// Logger name, can be filtered by `NameFilter`
string Name;
pure this(int, string name=__MODULE__){ Name=name; }
immutable:
private void Log3(Level level, in char[] message, long number,
int line)
{
//pragma(inline, false);
version(LogMute){}
else Log(level,message,number,line,Name);
}
private void Log3(Level level, in MLog[] message, int line)
{
//pragma(inline, false);
version(LogMute){}
else Log2(level,message,line,Name);
}
/// Log message at specified level
void Write(Level level, in char[] message=null, long number=0,
int line=__LINE__)
{
if(level>=LevelFilter)Log3(level,message,number,line);
}
/// ditto
void Write(Level level, scope const MLog[] message, int
line=__LINE__)
{
if(level>=LevelFilter)Log3(level,message,line);
}
/// ditto
alias Write opCall;
/// Log debug message
void Debug(in char[] message, long number=0, int line=__LINE__)
{
if(Level.Debug>=LevelFilter)Log3(Level.Debug,message,number,line);
}
/// ditto
void Debug(scope const MLog[] message, int line=__LINE__)
{
if(Level.Debug>=LevelFilter)Log3(Level.Debug,message,line);
}
/// Log informational message
void Info(in char[] message, long number=0, int line=__LINE__)
{
if(Level.Info>=LevelFilter)Log3(Level.Info,message,number,line);
}
/// Log warning message
void Warn(in char[] message, long number=0, int line=__LINE__)
{
Log3(Level.Warn,message,number,line);
}
/// Log error message
void Error(in char[] message, long number=0, int line=__LINE__)
{
Log3(Level.Error,message,number,line);
}
}
```
More information about the Digitalmars-d
mailing list