冗长级别在简单的日志实现c++
Verbosity level in simple Logger implemenation C++
由于我在c++学习,我目前正在为一个项目实现一个简单的记录器。
我已经得到了一个Logger基类,作为一些不同的appender,下一步是实现冗长级别。问题是,我不确定自己是否正确理解了冗长度的概念,所以我想在开始执行它们之前得到一些反馈。所以从我的理解来看,一般作品的冗长程度如下:
用户先创建两个Logger:例如:
FileLogger fl;
VSLogger vl;
之后,他可以设置冗长级别,如:
fl.setLoggerLevel(DEBUG);
vl.setLoggerLevel(FATAL_ERROR);
之后,他可以根据自己的需要记录日志,如:
fl.logg("New Object of Type .... created");
ASSERT(1,2, "1==2");
while assert以致命错误级别
写入VSLogger,在output文件中它可能看起来像这样:
13:36 Msg: New Object of Type .... created (LEVEL:DEBUG);
在Visual Studio中,它可能看起来像这样:
13:36 Msg: Assert (1==2) failed (LEVEL:FATAL_ERROR)
这是冗长级别的意思吗?还是我误解了冗长级别的一般概念?
我不明白为什么用户必须使用两个记录器。消费代码不应该关心日志目标。
另一个问题是你的消费代码没有在任何地方传递严重性。每当调用日志函数时,都会传入严重性。消费代码不关心当前的详细信息是多少,它只是传递一个严重程度,并依赖于日志记录器的实现来知道严重程度是否超过了详细信息级别。(此规则有一个例外,您检查冗长级别以避免在高性能代码中创建日志消息的开销)
我宁愿有一个记录器作为用户,附带两个输出,这可能有不同的冗长级别。
在最简单的情况下,我将创建一个全局函数Logger& GetLogger()
,它导致用户代码如GetLogger().LogDebug("New Object of Type .... created");
首先创建一个接口:
public class ILogger
{
public:
virtual LogDebug(string message)=0;
...
}
创建一个支持订阅的实例:
public class DispatchingLogger:ILogger
{
private:
vector<ILogger*> loggers;
public:
override LogDebug(string message)
{
foreach(ILogger logger in loggers)
{
logger.LogDebug(message);
}
}
void Subscribe(ILogger* logger)
{
loggers.add(logger);
}
}
那么全局GetLogger()
函数返回DispatchingLogger
的单个实例。您可以为它订阅几个具有不同冗长级别的实现。实现ILogger
的用户类也可以注册。
(我知道我的c++语法不正确,自从我使用c++以来已经有一点了)
冗长级别显示要记录哪些消息(或者更确切地说,记录哪些消息的严重性)。
。
Set verbosity to INFO
Log a trace message //the message will not be logged
Log a debug message //the message will not be logged
Log an info message //the message will be logged
Log a warning //the message will be logged
Log an error or a fatal error. // will be logged
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- 如何在log4cplus中实现异步日志记录
- 冗长级别在简单的日志实现c++
- 在c++中实现最小日志程序
- 是否有办法实现多个独立的日志系统与Boost.Log
- 一个可以指定基数的c++日志实现
- 如何在项目中实现良好的调试/日志记录功能