mirror of https://github.com/deavmi/dlog.git
Logger
- Added a statci method `flatten(...)` which lets you flatten an arbitrary sequance of actual argumnets (an AliasSeq) into a `string[]` - Removed old commented-out code - Updated documentation for methods - Ensure thge aliases `log` and `logc` are public Context - Added `Level` enum with members `INFO`, `WARN`, `ERROR` and `DEBUG` - Added a field `level` to `Context`
This commit is contained in:
parent
623126a830
commit
528654e428
|
@ -2,12 +2,22 @@ module dlog.context;
|
||||||
|
|
||||||
import std.conv : to;
|
import std.conv : to;
|
||||||
|
|
||||||
|
|
||||||
|
public enum Level
|
||||||
|
{
|
||||||
|
INFO,
|
||||||
|
WARN,
|
||||||
|
ERROR,
|
||||||
|
DEBUG
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context that is passed in with the call to log
|
* Context that is passed in with the call to log
|
||||||
*/
|
*/
|
||||||
public class Context
|
public class Context
|
||||||
{
|
{
|
||||||
private CompilationInfo lineInfo;
|
private CompilationInfo lineInfo;
|
||||||
|
private Level level;
|
||||||
|
|
||||||
this()
|
this()
|
||||||
{
|
{
|
||||||
|
|
|
@ -58,9 +58,43 @@ public class Logger
|
||||||
logger.log3Ctx(ctx, testParameters);
|
logger.log3Ctx(ctx, testParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
import dlog.context;
|
|
||||||
|
|
||||||
public final void log3(TextType...)(TextType segments, string c1 = __FILE_FULL_PATH__,
|
/**
|
||||||
|
* Given an arbitrary amount of arguments, convert each to a string
|
||||||
|
* and return that as an array
|
||||||
|
*
|
||||||
|
* Params:
|
||||||
|
* segments = alias sequence
|
||||||
|
* Returns: a flattened string[]
|
||||||
|
*/
|
||||||
|
public static string[] flatten(TextType...)(TextType segments)
|
||||||
|
{
|
||||||
|
/* The flattened components */
|
||||||
|
string[] components;
|
||||||
|
|
||||||
|
/* Flatten the components */
|
||||||
|
static foreach(messageComponent; segments)
|
||||||
|
{
|
||||||
|
components ~= to!(string)(messageComponent);
|
||||||
|
}
|
||||||
|
|
||||||
|
return components;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs the given string using the default context
|
||||||
|
*
|
||||||
|
* Params:
|
||||||
|
* text = the string to log
|
||||||
|
* __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 log3(string text, string c1 = __FILE_FULL_PATH__,
|
||||||
string c2 = __FILE__, ulong c3 = __LINE__,
|
string c2 = __FILE__, ulong c3 = __LINE__,
|
||||||
string c4 = __MODULE__, string c5 = __FUNCTION__,
|
string c4 = __MODULE__, string c5 = __FUNCTION__,
|
||||||
string c6 = __PRETTY_FUNCTION__)
|
string c6 = __PRETTY_FUNCTION__)
|
||||||
|
@ -75,12 +109,55 @@ public class Logger
|
||||||
defaultContext.setLineInfo(compilationInfo);
|
defaultContext.setLineInfo(compilationInfo);
|
||||||
|
|
||||||
/* Call the log */
|
/* Call the log */
|
||||||
log3Ctx(defaultContext, segments);
|
log3Ctx(defaultContext, text, c1, c2, c3, c4, c5, c6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs using the default context an arbitrary amount of arguments
|
||||||
|
*
|
||||||
|
* 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 log3(TextType...)(TextType segments, string c1 = __FILE_FULL_PATH__,
|
||||||
|
string c2 = __FILE__, ulong c3 = __LINE__,
|
||||||
|
string c4 = __MODULE__, string c5 = __FUNCTION__,
|
||||||
|
string c6 = __PRETTY_FUNCTION__)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Grab at compile-time all arguments and generate runtime code to add them to `components`
|
||||||
|
*
|
||||||
|
* The reason for taking n-1 is because the last argument is the context pointer (i.e. `this`)
|
||||||
|
* seeing how instance methods work.
|
||||||
|
*/
|
||||||
|
string[] components = flatten(segments)[0..$-1];
|
||||||
|
|
||||||
|
/* Join all `components` into a single string */
|
||||||
|
string messageOut = join(components, multiArgJoiner);
|
||||||
|
|
||||||
|
/* Call the log (with text and default context) */
|
||||||
|
log3(messageOut, c1, c2, c3, c4, c5, c6);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
public final void log3Ctx(Context, TextType...)(Context context, TextType segments, string c1 = __FILE_FULL_PATH__,
|
* Logs the given string using the provided context
|
||||||
|
*
|
||||||
|
* Params:
|
||||||
|
* context = the custom context to use
|
||||||
|
* text = the string to log
|
||||||
|
* __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 log3Ctx(Context context, string text, string c1 = __FILE_FULL_PATH__,
|
||||||
string c2 = __FILE__, ulong c3 = __LINE__,
|
string c2 = __FILE__, ulong c3 = __LINE__,
|
||||||
string c4 = __MODULE__, string c5 = __FUNCTION__,
|
string c4 = __MODULE__, string c5 = __FUNCTION__,
|
||||||
string c6 = __PRETTY_FUNCTION__)
|
string c6 = __PRETTY_FUNCTION__)
|
||||||
|
@ -90,76 +167,25 @@ public class Logger
|
||||||
|
|
||||||
/* Set the line information in the context */
|
/* Set the line information in the context */
|
||||||
context.setLineInfo(compilationInfo);
|
context.setLineInfo(compilationInfo);
|
||||||
|
|
||||||
/* Grab at compile-time all arguments and generate runtime code to add them to `components` */
|
|
||||||
string[] components;
|
|
||||||
static foreach(messageComponent; segments)
|
|
||||||
{
|
|
||||||
components ~= to!(string)(messageComponent);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Join all `components` into a single string */
|
|
||||||
string messageOut = join(components, multiArgJoiner);
|
|
||||||
|
|
||||||
/* Apply the transformation on the message */
|
/* Apply the transformation on the message */
|
||||||
string transformedMesage = messageTransform.execute(messageOut, context);
|
string transformedMesage = messageTransform.execute(text, context);
|
||||||
|
|
||||||
/* Call the underlying logger implementation */
|
/* Call the underlying logger implementation */
|
||||||
logImpl(transformedMesage);
|
logImpl(transformedMesage);
|
||||||
}
|
}
|
||||||
|
|
||||||
alias log = log3;
|
public alias log = log3;
|
||||||
alias logc = log3Ctx;
|
public alias logc = log3Ctx;
|
||||||
|
|
||||||
// /**
|
/**
|
||||||
// * Log a message (default context))
|
* Logging implementation, this is where the final
|
||||||
// */
|
* transformed text will be transferred to and finally
|
||||||
// public final void log(TextType...)(TextType message, string c1 = __FILE_FULL_PATH__,
|
* logged
|
||||||
// string c2 = __FILE__, ulong c3 = __LINE__,
|
*
|
||||||
// string c4 = __MODULE__, string c5 = __FUNCTION__,
|
* Params:
|
||||||
// string c6 = __PRETTY_FUNCTION__)
|
* message = the message to log
|
||||||
// {
|
*/
|
||||||
// /* Default context extras is nothing */
|
|
||||||
// string[] defaultContext = null;
|
|
||||||
|
|
||||||
// /* Call the log */
|
|
||||||
// logCtx(defaultContext, message);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Log a message
|
|
||||||
// */
|
|
||||||
// public final void logCtx(string[] ctx, TextType...)(string[] contextExtras, TextType message, string c1 = __FILE_FULL_PATH__,
|
|
||||||
// string c2 = __FILE__, ulong c3 = __LINE__,
|
|
||||||
// string c4 = __MODULE__, string c5 = __FUNCTION__,
|
|
||||||
// string c6 = __PRETTY_FUNCTION__)
|
|
||||||
// {
|
|
||||||
// /* Construct context array */
|
|
||||||
// string[] context = [c1, c2, to!(string)(c3), c4, c5, c6]~contextExtras;
|
|
||||||
|
|
||||||
// /* Grab at compile-time all arguments and generate runtime code to add them to `components` */
|
|
||||||
// string[] components;
|
|
||||||
// int metaLen = message[].length;
|
|
||||||
// static foreach(messageComponent; message)
|
|
||||||
// {
|
|
||||||
// components ~= to!(string)(messageComponent);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /* Join all `components` into a single string */
|
|
||||||
// string messageOut = join(components, multiArgJoiner);
|
|
||||||
|
|
||||||
// /* Apply the transformation on the message */
|
|
||||||
// string transformedMesage = messageTransform.execute(messageOut, context);
|
|
||||||
|
|
||||||
// /* Call the underlying logger implementation */
|
|
||||||
// logImpl(transformedMesage);
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logging implementation, this is where the fina
|
|
||||||
* transformed text will be transferred to and finally
|
|
||||||
* logged
|
|
||||||
*/
|
|
||||||
protected abstract void logImpl(string message);
|
protected abstract void logImpl(string message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue