mirror of
https://github.com/gabime/spdlog.git
synced 2025-09-28 17:19:34 +08:00
Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
813dcbcf63 | ||
![]() |
7663f58379 | ||
![]() |
8e3f968ba4 | ||
![]() |
f695e536dd | ||
![]() |
f257e4ea8c | ||
![]() |
0ed3e4cf76 | ||
![]() |
6d355fd602 | ||
![]() |
dd0b7b2d13 | ||
![]() |
42e5d98a48 | ||
![]() |
c060a10c10 | ||
![]() |
79a3a633c7 | ||
![]() |
52dfd478d6 | ||
![]() |
48eca46680 | ||
![]() |
f93277d271 | ||
![]() |
dda8af0092 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -61,7 +61,7 @@ install_manifest.txt
|
||||
/tests/tests.VC.VC.opendb
|
||||
/tests/tests.VC.db
|
||||
/tests/tests
|
||||
/tests/logs/file_helper_test.txt
|
||||
/tests/logs/*
|
||||
|
||||
# idea
|
||||
.idea/
|
@@ -4,7 +4,7 @@
|
||||
#
|
||||
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
project(spdlog VERSION 0.14.0)
|
||||
project(spdlog VERSION 0.16.2)
|
||||
include(CTest)
|
||||
include(CMakeDependentOption)
|
||||
include(GNUInstallDirs)
|
||||
|
@@ -109,26 +109,35 @@ public:
|
||||
}
|
||||
|
||||
//
|
||||
// return basename and extension:
|
||||
// return file path and its extension:
|
||||
//
|
||||
// "mylog.txt" => ("mylog", ".txt")
|
||||
// "mylog" => ("mylog", "")
|
||||
// "mylog." => ("mylog.", "")
|
||||
// "/dir1/dir2/mylog.txt" => ("/dir1/dir2/mylog", ".txt")
|
||||
//
|
||||
// the starting dot in filenames is ignored (hidden files):
|
||||
//
|
||||
// "my_folder/.mylog" => ("my_folder/.mylog")
|
||||
// ".mylog" => (".mylog". "")
|
||||
// "my_folder/.mylog" => ("my_folder/.mylog", "")
|
||||
// "my_folder/.mylog.txt" => ("my_folder/.mylog", ".txt")
|
||||
static std::tuple<filename_t, filename_t> split_by_extenstion(const spdlog::filename_t& fname)
|
||||
{
|
||||
auto ext_index = fname.rfind('.');
|
||||
|
||||
static std::tuple<filename_t, filename_t> split_by_extenstion(const filename_t& fname)
|
||||
{
|
||||
auto index = fname.rfind('.');
|
||||
bool found_ext = index != filename_t::npos && index !=0 && fname[index - 1] != details::os::folder_sep;
|
||||
if (found_ext)
|
||||
return std::make_tuple(fname.substr(0, index), fname.substr(index));
|
||||
else
|
||||
return std::make_tuple(fname, filename_t());
|
||||
}
|
||||
// no valid extension found - return whole path and empty string as extension
|
||||
if (ext_index == filename_t::npos || ext_index == 0 || ext_index == fname.size() - 1)
|
||||
return std::make_tuple(fname, spdlog::filename_t());
|
||||
|
||||
// treat casese like "/etc/rc.d/somelogfile or "/abc/.hiddenfile"
|
||||
//auto folder_index = fname.find('\\', ext_index);
|
||||
auto folder_index = fname.rfind(details::os::folder_sep);
|
||||
if (folder_index != fname.npos && folder_index >= ext_index - 1)
|
||||
return std::make_tuple(fname, spdlog::filename_t());
|
||||
|
||||
// finally - return a valid base and extnetion tuple
|
||||
return std::make_tuple(fname.substr(0, ext_index), fname.substr(ext_index));
|
||||
}
|
||||
private:
|
||||
FILE* _fd;
|
||||
filename_t _filename;
|
||||
|
@@ -98,6 +98,11 @@ inline void spdlog::logger::log(level::level_enum lvl, const char* msg)
|
||||
{
|
||||
_err_handler(ex.what());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
_err_handler("Unknown exception in logger " + _name);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
@@ -114,6 +119,11 @@ inline void spdlog::logger::log(level::level_enum lvl, const T& msg)
|
||||
{
|
||||
_err_handler(ex.what());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
_err_handler("Unknown exception in logger " + _name);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#define SPDLOG_VERSION "0.14.0"
|
||||
#define SPDLOG_VERSION "0.16.2"
|
||||
|
||||
#include "tweakme.h"
|
||||
#include "common.h"
|
||||
|
@@ -15,7 +15,7 @@ class failing_sink: public spdlog::sinks::sink
|
||||
throw std::runtime_error("some error happened during log");
|
||||
}
|
||||
|
||||
void flush()
|
||||
void flush() override
|
||||
{}
|
||||
};
|
||||
|
||||
|
@@ -73,77 +73,46 @@ TEST_CASE("file_helper_reopen2", "[file_helper::reopen(false)]]")
|
||||
REQUIRE(helper.size() == expected_size);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void test_split_ext(const char* fname, const char* expect_base, const char* expect_ext)
|
||||
{
|
||||
spdlog::filename_t filename(fname);
|
||||
spdlog::filename_t expected_base(expect_base);
|
||||
spdlog::filename_t expected_ext(expect_ext);
|
||||
|
||||
#ifdef _WIN32 // replace folder sep
|
||||
std::replace(filename.begin(), filename.end(), '/', '\\');
|
||||
std::replace(expected_base.begin(), expected_base.end(), '/', '\\');
|
||||
#endif
|
||||
spdlog::filename_t basename, ext;
|
||||
std::tie(basename, ext) = file_helper::split_by_extenstion(filename);
|
||||
REQUIRE(basename == expected_base);
|
||||
REQUIRE(ext == expected_ext);
|
||||
}
|
||||
|
||||
|
||||
TEST_CASE("file_helper_split_by_extenstion", "[file_helper::split_by_extenstion()]]")
|
||||
{
|
||||
std::string basename, ext;
|
||||
std::tie(basename, ext) = file_helper::split_by_extenstion("mylog.txt");
|
||||
REQUIRE(basename == "mylog");
|
||||
REQUIRE(ext == ".txt");
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_split_by_extenstion2", "[file_helper::split_by_extenstion()]]")
|
||||
{
|
||||
std::string basename, ext;
|
||||
std::tie(basename, ext) = file_helper::split_by_extenstion("mylog");
|
||||
REQUIRE(basename == "mylog");
|
||||
REQUIRE(ext == "");
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_split_by_extenstion3", "[file_helper::split_by_extenstion()]]")
|
||||
{
|
||||
std::string basename, ext;
|
||||
std::tie(basename, ext) = file_helper::split_by_extenstion("mylog.xyz.txt");
|
||||
REQUIRE(basename == "mylog.xyz");
|
||||
REQUIRE(ext == ".txt");
|
||||
}
|
||||
|
||||
|
||||
TEST_CASE("file_helper_split_by_extenstion4", "[file_helper::split_by_extenstion()]]")
|
||||
{
|
||||
std::string basename, ext;
|
||||
std::tie(basename, ext) = file_helper::split_by_extenstion("mylog.xyz....txt");
|
||||
REQUIRE(basename == "mylog.xyz...");
|
||||
REQUIRE(ext == ".txt");
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_split_by_extenstion5", "[file_helper::split_by_extenstion(hidden_file)]]")
|
||||
{
|
||||
std::string basename, ext;
|
||||
std::tie(basename, ext) = file_helper::split_by_extenstion(".mylog");
|
||||
REQUIRE(basename == ".mylog");
|
||||
REQUIRE(ext == "");
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_split_by_extenstion6", "[file_helper::split_by_extenstion(hidden_file)]]")
|
||||
{
|
||||
#ifdef _WIN32
|
||||
auto filename = "folder\\.mylog";
|
||||
auto expected_basename = "folder\\.mylog";
|
||||
#else
|
||||
auto filename = "folder/.mylog";
|
||||
auto expected_basename = "folder/.mylog";
|
||||
#endif
|
||||
std::string basename, ext;
|
||||
std::tie(basename, ext) = file_helper::split_by_extenstion(filename);
|
||||
REQUIRE(basename == expected_basename);
|
||||
REQUIRE(ext == "");
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_split_by_extenstion7", "[file_helper::split_by_extenstion(hidden_file)]]")
|
||||
{
|
||||
#ifdef _WIN32
|
||||
auto filename = "folder\\.mylog.txt";
|
||||
auto expected_basename = "folder\\.mylog";
|
||||
#else
|
||||
auto filename = "folder/.mylog.txt";
|
||||
auto expected_basename = "folder/.mylog";
|
||||
#endif
|
||||
std::string basename, ext;
|
||||
std::tie(basename, ext) = file_helper::split_by_extenstion(filename);
|
||||
REQUIRE(basename == expected_basename);
|
||||
REQUIRE(ext == ".txt");
|
||||
{
|
||||
test_split_ext("mylog.txt", "mylog", ".txt");
|
||||
test_split_ext(".mylog.txt", ".mylog", ".txt");
|
||||
test_split_ext(".mylog", ".mylog", "");
|
||||
test_split_ext("/aaa/bb.d/mylog", "/aaa/bb.d/mylog", "");
|
||||
test_split_ext("/aaa/bb.d/mylog.txt", "/aaa/bb.d/mylog", ".txt");
|
||||
test_split_ext("aaa/bbb/ccc/mylog.txt", "aaa/bbb/ccc/mylog", ".txt");
|
||||
test_split_ext("aaa/bbb/ccc/mylog.", "aaa/bbb/ccc/mylog.", "");
|
||||
test_split_ext("aaa/bbb/ccc/.mylog.txt", "aaa/bbb/ccc/.mylog", ".txt");
|
||||
test_split_ext("/aaa/bbb/ccc/mylog.txt", "/aaa/bbb/ccc/mylog", ".txt");
|
||||
test_split_ext("/aaa/bbb/ccc/.mylog", "/aaa/bbb/ccc/.mylog", "");
|
||||
test_split_ext("../mylog.txt", "../mylog", ".txt");
|
||||
test_split_ext(".././mylog.txt", ".././mylog", ".txt");
|
||||
test_split_ext(".././mylog.txt/xxx", ".././mylog.txt/xxx", "");
|
||||
test_split_ext("/mylog.txt", "/mylog", ".txt");
|
||||
test_split_ext("//mylog.txt", "//mylog", ".txt");
|
||||
test_split_ext("", "", "");
|
||||
test_split_ext(".", ".", "");
|
||||
test_split_ext("..txt", ".", ".txt");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user