提交 1dce8d1c 编写于 作者: Q Qiao Longfei 提交者: GitHub

Merge pull request #70 from ChunweiYan/feature/glog_to_exception

feature/glog to exception
...@@ -41,6 +41,7 @@ add_executable(vl_test ...@@ -41,6 +41,7 @@ add_executable(vl_test
${PROJECT_SOURCE_DIR}/visualdl/logic/histogram_test.cc ${PROJECT_SOURCE_DIR}/visualdl/logic/histogram_test.cc
${PROJECT_SOURCE_DIR}/visualdl/storage/storage_test.cc ${PROJECT_SOURCE_DIR}/visualdl/storage/storage_test.cc
${PROJECT_SOURCE_DIR}/visualdl/utils/test_concurrency.cc ${PROJECT_SOURCE_DIR}/visualdl/utils/test_concurrency.cc
${PROJECT_SOURCE_DIR}/visualdl/utils/test_logging.cc
${PROJECT_SOURCE_DIR}/visualdl/utils/test_image.cc ${PROJECT_SOURCE_DIR}/visualdl/utils/test_image.cc
${PROJECT_SOURCE_DIR}/visualdl/utils/concurrency.h ${PROJECT_SOURCE_DIR}/visualdl/utils/concurrency.h
${PROJECT_SOURCE_DIR}/visualdl/utils/filesystem.h ${PROJECT_SOURCE_DIR}/visualdl/utils/filesystem.h
......
#ifndef VISUALDL_LOGIC_HISTOGRAM_H #ifndef VISUALDL_LOGIC_HISTOGRAM_H
#define VISUALDL_LOGIC_HISTOGRAM_H #define VISUALDL_LOGIC_HISTOGRAM_H
#include <glog/logging.h>
#include <cstdlib> #include <cstdlib>
#include <limits> #include <limits>
#include <vector> #include <vector>
#include "visualdl/utils/logging.h"
namespace visualdl { namespace visualdl {
// An interface to retrieve records of a histogram. // An interface to retrieve records of a histogram.
......
#include <glog/logging.h>
#include <ctime> #include <ctime>
#include "visualdl/logic/im.h" #include "visualdl/logic/im.h"
......
#ifndef VISUALDL_LOGIC_IM_H #ifndef VISUALDL_LOGIC_IM_H
#define VISUALDL_LOGIC_IM_H #define VISUALDL_LOGIC_IM_H
#include <glog/logging.h>
#include <memory> #include <memory>
#include <mutex> #include <mutex>
#include <string> #include <string>
#include "visualdl/utils/concurrency.h" #include "visualdl/utils/concurrency.h"
#include "visualdl/utils/guard.h" #include "visualdl/utils/guard.h"
#include "visualdl/utils/logging.h"
namespace visualdl { namespace visualdl {
......
#ifndef VISUALDL_STORAGE_STORAGE_H #ifndef VISUALDL_STORAGE_STORAGE_H
#define VISUALDL_STORAGE_STORAGE_H #define VISUALDL_STORAGE_STORAGE_H
#include <glog/logging.h>
#include <algorithm> #include <algorithm>
#include <set> #include <set>
#include <vector> #include <vector>
......
#ifndef VISUALDL_TABLET_H #ifndef VISUALDL_TABLET_H
#define VISUALDL_TABLET_H #define VISUALDL_TABLET_H
#include <glog/logging.h>
#include "visualdl/logic/im.h" #include "visualdl/logic/im.h"
#include "visualdl/storage/record.h" #include "visualdl/storage/record.h"
#include "visualdl/storage/storage.pb.h" #include "visualdl/storage/storage.pb.h"
......
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "visualdl/utils/logging.h"
int main(int argc, char **argv) { int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv); ::testing::InitGoogleTest(&argc, argv);
std::signal(SIGINT, visualdl::log::SignalHandler);
return RUN_ALL_TESTS(); return RUN_ALL_TESTS();
} }
#ifndef VISUALDL_UTILS_CONCURRENCY_H #ifndef VISUALDL_UTILS_CONCURRENCY_H
#define VISUALDL_UTILS_CONCURRENCY_H #define VISUALDL_UTILS_CONCURRENCY_H
#include <glog/logging.h>
#include <chrono> #include <chrono>
#include <memory> #include <memory>
#include <thread> #include <thread>
#include <vector> #include <vector>
#include "visualdl/utils/logging.h"
namespace visualdl { namespace visualdl {
namespace cc { namespace cc {
......
...@@ -44,7 +44,6 @@ bool DeSerializeFromFile(T* proto, const std::string& path) { ...@@ -44,7 +44,6 @@ bool DeSerializeFromFile(T* proto, const std::string& path) {
} }
static void TryMkdir(const std::string& dir) { static void TryMkdir(const std::string& dir) {
VLOG(1) << "try to mkdir " << dir;
struct stat st = {0}; struct stat st = {0};
if (stat(dir.c_str(), &st) == -1) { if (stat(dir.c_str(), &st) == -1) {
::mkdir(dir.c_str(), 0700); ::mkdir(dir.c_str(), 0700);
...@@ -67,7 +66,6 @@ static void TryRecurMkdir(const std::string& path) { ...@@ -67,7 +66,6 @@ static void TryRecurMkdir(const std::string& path) {
inline void Write(const std::string& path, inline void Write(const std::string& path,
const std::string& buffer, const std::string& buffer,
std::ios::openmode open_mode = std::ios::binary) { std::ios::openmode open_mode = std::ios::binary) {
VLOG(1) << "write to path " << path;
std::ofstream file(path, open_mode); std::ofstream file(path, open_mode);
CHECK(file.is_open()) << "failed to open " << path; CHECK(file.is_open()) << "failed to open " << path;
file.write(buffer.c_str(), buffer.size()); file.write(buffer.c_str(), buffer.size());
...@@ -76,7 +74,6 @@ inline void Write(const std::string& path, ...@@ -76,7 +74,6 @@ inline void Write(const std::string& path,
inline std::string Read(const std::string& path, inline std::string Read(const std::string& path,
std::ios::openmode open_mode = std::ios::binary) { std::ios::openmode open_mode = std::ios::binary) {
VLOG(1) << "read from path " << path;
std::string buffer; std::string buffer;
std::ifstream file(path, open_mode | std::ios::ate); std::ifstream file(path, open_mode | std::ios::ate);
CHECK(file.is_open()) << "failed to open " << path; CHECK(file.is_open()) << "failed to open " << path;
......
#ifndef VISUALDL_UTILS_IMAGE_H #ifndef VISUALDL_UTILS_IMAGE_H
#define VISUALDL_UTILS_IMAGE_H #define VISUALDL_UTILS_IMAGE_H
#include <glog/logging.h>
#include <Eigen/Core> #include <Eigen/Core>
#include <unsupported/Eigen/CXX11/Tensor> #include <unsupported/Eigen/CXX11/Tensor>
#include "visualdl/utils/logging.h"
namespace visualdl { namespace visualdl {
using uint8_t = unsigned char; using uint8_t = unsigned char;
......
#ifndef VISUALDL_UTILS_LOG_H
#define VISUALDL_UTILS_LOG_H
#include <stdexcept>
namespace visualdl {
namespace log {
class NotImplementedException : public std::logic_error {
public:
NotImplementedException() : std::logic_error{"Function not implemented"} {}
};
} // namespace log
} // namespace visualdl
#endif
#ifndef VISUALDL_UTILS_LOGGING_H
#define VISUALDL_UTILS_LOGGING_H
#include <csignal>
#include <iostream>
#include <sstream>
#include <stdexcept>
#include <string>
#if defined(VISUALDL_WITH_GLOG)
#include <glog/logging.h>
#endif
namespace visualdl {
namespace logging {
#if !defined(VISUALDL_WITH_GLOG)
// basic log stream for INFO, ERROR, WARNING
struct LogStream {
LogStream(const char* file, int line) : os_(std::cerr) {
os_ << "[" << file << ":" << line << "] ";
}
~LogStream() { os_ << "\n"; }
std::ostream& stream() { return os_; }
void operator=(const LogStream&) = delete;
LogStream(const LogStream&) = delete;
private:
std::ostream& os_;
};
#endif
#if !defined(VISUALDL_WITH_GLOG)
#if defined(VISUALDL_FATAL_ABORT)
// log stream for FATAL
struct LogStreamFatal : public LogStream {
LogStreamFatal(const char* file, int line) : LogStream(file, line) {}
~LogStreamFatal() { abort(); }
LogStreamFatal(const LogStreamFatal&) = delete;
void operator=(const LogStreamFatal&) = delete;
};
#else
struct Error : public std::runtime_error {
explicit Error(const std::string& s) : std::runtime_error(s) {}
};
// With exception.
struct LogStreamFatal : public std::basic_ostream<char, std::char_traits<char>> {
LogStreamFatal(const char* file, int line) {
ss << "[" << file << ":" << line << "] ";
throw Error(ss.str());
}
LogStreamFatal& operator<<(std::basic_streambuf<char, std::char_traits<char>>* sb) {
*this << sb;
if (sb->sgetc() == '\n') {
std::cout << "end get";
}
return *this;
}
friend LogStreamFatal& operator<<(LogStreamFatal& os,
const char* msg) {
std::cout << "msg: '" << msg << "'" << std::endl;
os.stream() << msg;
if (msg == "\n") {
os.has_throw_ = true;
throw Error(os.stream().str());
}
return os;
}
std::stringstream& stream() { return ss; }
~LogStreamFatal() {
if (!has_throw_) {
std::cerr << "throw exception" << std::endl;
throw Error(ss.str());
}
}
private:
bool has_throw_{false};
mutable std::stringstream ss;
};
#endif // VISUALDL_FATAL_ABORT
#endif // VISUALDL_WITH_GLOG
#ifndef VISUALDL_WITH_GLOG
#define LOG(severity) LOG_##severity
#define LOG_INFO visualdl::logging::LogStream(__FILE__, __LINE__).stream()
#define LOG_WARNING LOG_INFO
#define LOG_ERROR LOG_INFO
#define LOG_FATAL visualdl::logging::LogStreamFatal(__FILE__, __LINE__)
// basic version without support for debug level.
#define VLOG(x) LOG_INFO
#define CHECK(cond) \
if (!(cond)) \
visualdl::logging::LogStreamFatal(__FILE__, __LINE__) \
<< "Check failed: " << #cond << " "
#define CHECK_EQ(v0, v1) CHECK_BINARY(v0, v1, ==)
#define CHECK_GE(v0, v1) CHECK_BINARY(v0, v1, >=)
#define CHECK_GT(v0, v1) CHECK_BINARY(v0, v1, >)
#define CHECK_LE(v0, v1) CHECK_BINARY(v0, v1, <=)
#define CHECK_LT(v0, v1) CHECK_BINARY(v0, v1, <)
#define CHECK_BINARY(v0, v1, op) \
if (!(v0 op v1)) LOG_FATAL << " Check failed: " << v0 << #op << v1 << " "
#endif // ifndef VISUALDL_WITH_GLOG
} // namespace logging
} // namespace visualdl
namespace visualdl {
namespace log {
class NotImplementedException : public std::logic_error {
public:
NotImplementedException() : std::logic_error{"Function not implemented"} {}
};
static void SignalHandler(int sig) {
LOG(INFO) << "get signal " << sig;
exit(sig);
}
struct __once_caller__ {
__once_caller__() { std::signal(SIGINT, SignalHandler); }
};
} // namespace log
} // namespace visualdl
#endif
#include "visualdl/utils/concurrency.h" #include "visualdl/utils/concurrency.h"
#include <glog/logging.h>
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "visualdl/utils/logging.h"
namespace visualdl { namespace visualdl {
int counter = 0; int counter = 0;
......
#ifdef VISUALDL_WITH_GLOG
#undef VISUALDL_WITH_GLOG
#endif
#include "visualdl/utils/logging.h"
#include <gtest/gtest.h>
TEST(Log, LOG) { LOG(INFO) << "hello world"; }
TEST(Log, CHECK) { CHECK_EQ(1, 1) << "yes this works"; }
TEST(Log, CHECK_FAIL) {
try {
{
CHECK_LE(3, 2) << "this is wrong" << "\n";
}
// throw std::runtime_error("some error");
} catch (const visualdl::logging::Error& e) {
LOG(INFO) << "in exception";
} catch (...) {
LOG(INFO) << "catch something";
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册