是否有一个简单的 api(无循环)来检查 varargs 是否包含某些值(char *)?
如果没有简单的 API,我应该如何在没有任何 args 计数的情况下进行迭代?
我的方法应该能够根据配置 IP 过滤日志,因此我需要检查其中一个参数是否为 10.3.2.2(某些配置 IP)。
void Logger::Log(const char *format, ...) {
lock_guard<mutex> guard(mtx_);
if (!file_) {
file_ = fopen("application.log", "w");
}
time_t current = time(0);
tm *ptm = localtime(¤t);
stringstream ss;
ss << "\n[" << ptm->tm_min << ":" << ptm->tm_sec << "]";
fprintf(file_, ss.str().data());
va_list argptr;
va_start(argptr, format);
vfprintf(file_, format, argptr);
va_end(argptr);
fflush(file_);
}
看这节课,只显示给定参数长度和类型的迭代。格式而不是检查包含是昂贵的,记录器应该能够支持高性能需求。
我的目标是实现简单的记录器方法。所以你会这样称呼它:
Log("trafic from ip %s to ip %s", "10.1.1.1","1.1.1.1")
还有很多其他的电话。在过滤器中,我想检查参数值之一是否为“10.1.1.1”(例如),所以不要记录它。