CBrother原生支持日志系统
之前研究了其他语言的日志系统,基本上都不是原生支持的,python原生支持有个logging,也只支持脚本层面写日志,用C语言去扩展第三方库也是没有统一的日志接口,如果扩展库要反馈错误给用户需要用到异常机制。java也是如此,所以java用C语言扩展第三方库很少,一般都直接用Java代码重新实现第三库。所以我一直陷入了一个困惑,难道一门语言原生支持日志系统属于多管闲事?经过一个漫长的思维斗争,最终想清楚了这其中的细微区别,于是决定:CBrother原生支持日志系统。
其他语言的错误反馈局限性
CBrother原生日志的优势
如此,后续扩展库只需要使用CBrother提供的接口输出详细日志,并在扩展库文档中给出日志排错说明书即可。扩展库开发中不再需要为了错误反馈而做大量设计,对于接口的保留可以怎么简单好用怎么来,不但降低扩展库使用难度,同时也降低了扩展库开发难度。
CBrother升级到v2.4.5
原生支持日志系统,详细用法文档中查看《日志模块》章节
增加了@logger标签符来声明日志配置函数
类内this与super增加特殊语义,可用于控制多层继承时的父子类同名函数调用
日志的使用
@logger //声明loggerConfig为日志配置函数,其运行时机早于一切模块加载
function loggerConfig()
{
var consoleLogger = new logger::LoggerOutputConsole();
var fileLogger = new logger::LoggerOutputFile(GetRoot(),"http-80");
logger::addLoggerOutput("cbrother.httpserver",consoleLogger,"[%d] %m"); //给http日志添加控制台输出
logger::addLoggerOutput("cbrother.httpserver",fileLogger,"[%d] %m"); //给http日志添加日志输出
logger::addLoggerOutput("test",consoleLogger); //给test日志添加一个控制台输出
}
function main(parm)
{
var httpServer = new HttpServer(); //模块默认日志名为cbrother.httpserver
httpServer.setRoot(GetRoot());
httpServer.startServer(80);
var logger = logger::getLogger("test");
logger.debug("test logger");
GetInput();
}