From 70dc9c0449c9fb855c80ac1e1350001c9901a556 Mon Sep 17 00:00:00 2001 From: "Tristan B. Velloza Kildaire" Date: Thu, 2 Mar 2023 11:09:28 +0200 Subject: [PATCH] Logger - Added missing header comment for the consructor for `Logger` - Implemented `error(TextType...)(TextType)` --- source/dlog/core.d | 97 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 86 insertions(+), 11 deletions(-) diff --git a/source/dlog/core.d b/source/dlog/core.d index 7149ba9..debb247 100644 --- a/source/dlog/core.d +++ b/source/dlog/core.d @@ -9,7 +9,7 @@ import std.conv : to; import std.range : join; import dlog.transform : MessageTransform; import dlog.defaults; -import dlog.context : Context, CompilationInfo; +import dlog.context : Context, CompilationInfo, Level; import dlog.utilities : flatten; /** @@ -25,19 +25,25 @@ public class Logger /* The multiple argument joiner */ private string multiArgJoiner; - /** - * Constructs a new Logger with the default - * MessageTransform, see TODO (ref module) - */ + /** + * Constructs a new Logger with the default + * MessageTransform + * + * Params: + * multiArgJoiner = optional joiner for segmented prints (default is " ") + */ this(string multiArgJoiner = " ") { this(new DefaultTransform(), multiArgJoiner); } - /** - * Constructs a new Logger with the given - * MessageTransform - */ + /** + * Constructs a new Logger with the provided + * custom message transform + * Params: + * messageTransform = the message transform to use + * multiArgJoiner = optional joiner for segmented prints (default is " ") + */ this(MessageTransform messageTransform, string multiArgJoiner = " ") { this.messageTransform = messageTransform; @@ -154,7 +160,50 @@ public class Logger logImpl(transformedMesage); } - + /** + * Logs using the default context an arbitrary amount of arguments + * specifically setting the context's level to ERROR + * + * Params: + * segments = the arbitrary argumnets (alias sequence) + * __FILE_FULL_PATH__ = compile time usage file + * __FILE__ = compile time usage file (relative) + * __LINE__ = compile time usage line number + * __MODULE__ = compile time usage module + * __FUNCTION__ = compile time usage function + * __PRETTY_FUNCTION__ = compile time usage function (pretty) + */ + public final void error(TextType...)(TextType segments, + string c1 = __FILE_FULL_PATH__, + string c2 = __FILE__, ulong c3 = __LINE__, + string c4 = __MODULE__, string c5 = __FUNCTION__, + string c6 = __PRETTY_FUNCTION__) + { + /* Use the default context `Context` */ + Context defaultContext = new Context(); + + /* Build up the line information */ + CompilationInfo compilationInfo = CompilationInfo(c1, c2, c3, c4, c5, c6); + + /* Set the line information in the context */ + defaultContext.setLineInfo(compilationInfo); + + /* Set the level to error */ + defaultContext.setLevel(Level.ERROR); + + /** + * Grab at compile-time all arguments and generate runtime code to add them to `components` + */ + string[] components = flatten(segments); + + /* Join all `components` into a single string */ + string messageOut = join(components, multiArgJoiner); + + + + /* Call the log */ + logc(defaultContext, messageOut, c1, c2, c3, c4, c5, c6); + } /** * Logging implementation, this is where the final @@ -224,11 +273,37 @@ unittest // Create a default logger with the default joiner logger = new DefaultLogger(); - // Create c custom context + // Create a custom context Context customContext = new Context(); // Log with the custom context logger.logc(customContext, logger.args(["an", "array"], 1, "hello", true)); + writeln(); +} + +/** + * Printing out some mixed data-types, also using a DEFAULT context + * but also testing out the `error()`, `warn()`, `info()` and `debug()` + */ +unittest +{ + Logger logger = new DefaultLogger(); + + // Create a default logger with the default joiner + logger = new DefaultLogger(); + + // Test out `error()` + logger.error(["woah", "LEVELS!"], 69.420); + + // Test out `info()` + logger.info(["woah", "LEVELS!"], 69.420); + + // Test out `warn()` + logger.warn(["woah", "LEVELS!"], 69.420); + + // Test out `debug_()` + logger.debug_(["woah", "LEVELS!"], 69.420); + writeln(); } \ No newline at end of file