void CassLog::callback(const CassLogMessage* message, void* data) { LogData* log_data = reinterpret_cast<LogData*>(data); std::string str(message->message); if (message->severity <= log_data->output_log_level) { fprintf(stderr, "CassLog: %u.%03u [%s] (%s:%d:%s): %s\n", static_cast<unsigned int>(message->time_ms / 1000), static_cast<unsigned int>(message->time_ms % 1000), cass_log_level_string(message->severity), message->file, message->line, message->function, message->message); } boost::lock_guard<LogData> l(*log_data); if (log_data->message.empty()) return; if (str.find(log_data->message) != std::string::npos) { log_data->message_count++; } }
static void php_cassandra_log(const CassLogMessage* message, void* data) { char log[MAXPATHLEN + 1]; uint log_length = 0; /* Making a copy here because location could be updated by a PHP thread. */ uv_rwlock_rdlock(&log_lock); if (log_location) { log_length = MIN(strlen(log_location), MAXPATHLEN); memcpy(log, log_location, log_length); } uv_rwlock_rdunlock(&log_lock); log[log_length] = '\0'; if (log_length > 0) { int fd = -1; #ifndef _WIN32 if (!strcmp(log, "syslog")) { php_syslog(LOG_NOTICE, "cassandra | [%s] %s (%s:%d)", cass_log_level_string(message->severity), message->message, message->file, message->line); return; } #endif fd = open(log, O_CREAT | O_APPEND | O_WRONLY, 0644); if (fd != 1) { time_t log_time; struct tm log_tm; char log_time_str[32]; size_t needed = 0; char* tmp = NULL; time(&log_time); php_localtime_r(&log_time, &log_tm); strftime(log_time_str, sizeof(log_time_str), "%d-%m-%Y %H:%M:%S %Z", &log_tm); needed = snprintf(NULL, 0, "%s [%s] %s (%s:%d)%s", log_time_str, cass_log_level_string(message->severity), message->message, message->file, message->line, PHP_EOL); tmp = malloc(needed + 1); sprintf(tmp, "%s [%s] %s (%s:%d)%s", log_time_str, cass_log_level_string(message->severity), message->message, message->file, message->line, PHP_EOL); write(fd, tmp, needed); free(tmp); close(fd); return; } } /* This defaults to using "stderr" instead of "sapi_module.log_message" * because there are no guarantees that all implementations of the SAPI * logging function are thread-safe. */ fprintf(stderr, "cassandra | [%s] %s (%s:%d)%s", cass_log_level_string(message->severity), message->message, message->file, message->line, PHP_EOL); }