Awesome
<p align="center"> <img src="branding/logo.png" width=220> </p> <br> <h1 align="center">dlog</h1> <h3 align="center"><i><b>Simple and modular logging library</i></b></h3><br> <br
[2021-Dec-23 11:17:35.3527637] (source/dlog/testing/thing.d:12): This is a log message
Usage
We recommend you use dub to add dlog to your project as follows:
dub add dlog
Components
dlog is formed out of two main components:
Logger
- The logger contains the needed barebones for facilitating the actual logging of text
- The base logger (i.e.
Logger
) maintains a list of attaches filters, message transformers and handlers
Filter
- Acts as a predicate on the incoming message and determines whether it should be logged or not
- This is used by the
BasicLogger
to implement log levels
Transform
- A message transform is attached to a logger and performs manipulation on the message logged
- They may be chained as to perform multiple transformations in a stream-like fashion
Handler
- A handler handles the final transformed message, for some this means outputting to standard out, or a file
Quick start
If you want to immediately begin logging text using the defaults and don't care about implementing your own transformations then you can simply use the default logger as follows:
import dlog;
DefaultLogger logger = new DefaultLogger();
logger.setLevel(Level.DEBUG);
logger.error(["woah", "LEVELS!"], 69.420);
logger.info(["woah", "LEVELS!"], 69.420);
logger.warn(["woah", "LEVELS!"], 69.420);
logger.debug_(["woah", "LEVELS!"], 69.420);
// Should not be able to see this
logger.setLevel(Level.INFO);
logger.debug_("Can't see me!");
This will output the following:
[2024-Apr-09 19:14:38.3077171] (ERROR): ["woah", "LEVELS!"] 69.42
[2024-Apr-09 19:14:38.3077346] (INFO): ["woah", "LEVELS!"] 69.42
[2024-Apr-09 19:14:38.3077559] (WARN): ["woah", "LEVELS!"] 69.42
[2024-Apr-09 19:14:38.3077759] (DEBUG): ["woah", "LEVELS!"] 69.42
You can see the full API for more information.
Custom loggers
Implementing your own transform
Perhaps the default transformation, DefaultTransform
, may not be what you want. Maybe you want the module name included in the logged
messages or perhaps don't want the date-and-timestamp included at all. All of this can be up to you if you choose to implement your own
message transform.
You will need to start off with a class that inherits from the Transform
class and then which overrides the transform
method as shown below:
import dlog;
public class CustomTransform : Transform
{
public override Message transform(Message message)
{
BasicMessage bmesg = cast(BasicMessage)message;
// Only handle BasicMessage(s) - ones which have `setText(string)`
if(bmesg is null)
{
return message;
}
string transformed;
/* Insert transformation code here */
bmesg.setText(transformed);
return message;
}
}
License
LGPL v3