voile.log

ログ取得のためのユーティリティモジュール
struct LogData;
ulong id;
LogLevel level;
SysTime time;
string file;
uint line;
string msg;
string moduleName;
string funcName;
string prettyFuncName;
string threadId;
const nothrow @property @safe JSONValue json();
nothrow @property @safe void json(JSONValue v);
const string toString();
interface LogStorageInput;
abstract const @property LogData front();
abstract const @property bool empty();
abstract void popFront();
abstract void reset();
interface LogStorageOutput;
abstract void put(LogData datas);
abstract void clear();
class LogStorageInMemory: voile.log.LogStorageInput, voile.log.LogStorageOutput;
const @property @safe LogData front();
const @property @safe bool empty();
@safe void popFront();
@safe void put(LogData data);
pure nothrow @nogc @safe void reset();
pure nothrow @nogc @safe void clear();
const pure nothrow @safe LogStorageInMemory save();
const pure nothrow @nogc @property @safe size_t currentIndex();
const pure nothrow @nogc @property @safe size_t length();
const pure nothrow @safe LogStorageInMemory opSlice();
const pure nothrow @safe LogStorageInMemory opSlice(size_t begin, size_t end);
const pure nothrow @safe auto slice();
const pure nothrow @safe auto slice(size_t begin, size_t end);
alias opDoller = length;
class LogStorageLogger: std.logger.core.Logger;
@safe this(LogStorageOutput logDst, LogLevel lv = LogLevel.all);
@trusted void writeLogMsg(ref LogEntry payload);
class InMemoryLogger: voile.log.LogStorageLogger;
メモリ内のロガー
Examples:
import std.logger: LogLevel;
auto logger = new InMemoryLogger(LogLevel.info);
logger.trace("TRACETEST"); // ignore
logger.info("INFOTEST");
logger.warning("WARNINGTEST");
logger.error("ERRORTEST");
auto input = logger.logStorage;
assert(!input.empty);
assert(input.front.id == 0);
assert(input.front.msg == "INFOTEST");
input.popFront();
assert(!input.empty);
assert(input.front.id == 1);
assert(input.front.msg == "WARNINGTEST");
input.popFront();
assert(!input.empty);
assert(input.front.id == 2);
assert(input.front.msg == "ERRORTEST");
input.popFront();
assert(input.empty);
@safe this(LogLevel lv = LogLevel.all);
inout pure nothrow @property @safe inout(LogStorageInMemory) logStorage();
const pure nothrow @safe auto slice();
const pure nothrow @safe auto slice(size_t begin, size_t end);
class TextFileLogger: std.logger.filelogger.FileLogger;
テキストファイルのロガー
@safe this(in string fn, const LogLevel lv = LogLevel.all);
@safe this(in string fn, const LogLevel lv, CreateFolder createFileNameFolder);
@safe this(File file, const LogLevel lv = LogLevel.all);
protected @safe void beginLogMsg(string file, int line, string funcName, string prettyFuncName, string moduleName, LogLevel logLevel, Tid threadId, SysTime timestamp, Logger logger);
protected void logMsgPart(scope const(char)[] msg);
protected void finishLogMsg();
class JsonFileLogger: std.logger.core.Logger;
JSONファイルのロガー
@safe this(in string fn, const LogLevel lv = LogLevel.all);
@trusted this(in string fn, const LogLevel lv, CreateFolder createFileNameFolder);
@safe this(File file, const LogLevel lv = LogLevel.all);
@trusted void writeLogMsg(ref LogEntry payload);
string getFilename();
static LogStorageInput loadFromFile(string fileName);
class XmlFileLogger: std.logger.core.Logger;
XMLファイルのロガー
@safe this(in string fn, const LogLevel lv = LogLevel.all);
@trusted this(in string fn, const LogLevel lv, CreateFolder createFileNameFolder);
@safe this(File file, const LogLevel lv = LogLevel.all);
@trusted void writeLogMsg(ref LogEntry payload);
string getFilename();
class CsvFileLogger: std.logger.core.Logger;
CSVファイルのロガー
@safe this(in string fn, const LogLevel lv = LogLevel.all);
@trusted this(in string fn, const LogLevel lv, CreateFolder createFileNameFolder);
@safe this(File file, const LogLevel lv = LogLevel.all);
@trusted void writeLogMsg(ref LogEntry payload);
string getFilename();
class TsvFileLogger: std.logger.core.Logger;
TSVファイルのロガー
@safe this(in string fn, const LogLevel lv = LogLevel.all);
@trusted this(in string fn, const LogLevel lv, CreateFolder createFileNameFolder);
@safe this(File file, const LogLevel lv = LogLevel.all);
@trusted void writeLogMsg(ref LogEntry payload);
string getFilename();
class NamedLogger: std.logger.multilogger.MultiLogger;
@safe Logger getLogger(string name);
ロガーを取得する
@safe void insertLogger(string name, Logger l);
ロガーを追加する
重複チェックをする
class DispatchLogger: voile.log.NamedLogger;
Examples:
auto logger = new DispatchLogger;
with (logger)
{
	insertLogger("test1", new InMemoryLogger);
	insertLogger("test2", new InMemoryLogger);
	addFilter(Filter("test1", msg: r"test\d{3}"));
	addFilter(Filter("test2", logLevel: LogLevel.warning));
}
logger.info("test001");    // -> test1
logger.trace("aaa");       // -> drop
logger.warning("xxx");     // -> test2
logger.warning("test002"); // -> test1
import std.algorithm: equal, map;
assert((cast(InMemoryLogger)logger.getLogger("test1")).logStorage.map!"a.msg".equal(["test001", "test002"]));
assert((cast(InMemoryLogger)logger.getLogger("test2")).logStorage.map!"a.msg".equal(["xxx"]));
struct Filter;
inout @property @safe inout(Regex!char) file();
@property @safe void file(string pattern);
@property @safe void file(Regex!char r);
inout @property @safe inout(Regex!char) moduleName();
@property @safe void moduleName(string pattern);
@property @safe void moduleName(Regex!char r);
inout @property @safe inout(Regex!char) funcName();
@property @safe void funcName(string pattern);
@property @safe void funcName(Regex!char r);
inout @property @safe inout(Regex!char) prettyFuncName();
@property @safe void prettyFuncName(string pattern);
@property @safe void prettyFuncName(Regex!char r);
inout @property @safe inout(Regex!char) msg();
@property @safe void msg(string pattern);
@property @safe void msg(Regex!char r);
inout @property @safe string targetName();
@property @safe void targetName(string name);
const @property @safe size_t lineMax();
@property @safe void lineMax(size_t num);
const @property @safe size_t lineMin();
@property @safe void lineMin(size_t num);
@safe void setLineSpan(size_t min, size_t max);
const @property @safe LogLevel logLevel();
@property @safe void logLevel(LogLevel lv);
@safe this(string targetName, string file = null, string moduleName = null, string funcName = null, string prettyFuncName = null, string msg = null, size_t lineMax = size_t.max, size_t lineMin = size_t.min, LogLevel logLevel = LogLevel.all);
Constructor
@safe void addFilter(Filter filter);
@safe void writeLogMsg(ref LogEntry payload);
class SynchronizedLogger: std.logger.core.Logger;
マルチスレッド同期機構を備えたLogger
this(Logger logger, LogLevel lv = LogLevel.all);
this(shared Logger logger, LogLevel lv = LogLevel.all);
shared this(Logger logger, LogLevel lv = LogLevel.all);
shared this(shared Logger logger, LogLevel lv = LogLevel.all);
@trusted void writeLogMsg(ref LogEntry payload);
template Logging(loggerAlias...)
クラス内で使用するロガーを切り替えるためのミックスインテンプレート
@trusted Logger getLogger(string name, Logger defaultLogger = cast()sharedLog);
名前からロガーを取得する