Use a tracing EnvFilter directive for -debug flags

This commit is contained in:
Jack Grigg 2020-07-11 11:35:27 +12:00
parent d5de95f170
commit 2b7d824714
15 changed files with 230 additions and 19 deletions

64
Cargo.lock generated
View File

@ -32,6 +32,15 @@ dependencies = [
"opaque-debug",
]
[[package]]
name = "aho-corasick"
version = "0.7.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86"
dependencies = [
"memchr",
]
[[package]]
name = "ansi_term"
version = "0.12.1"
@ -500,6 +509,21 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "matchers"
version = "0.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1"
dependencies = [
"regex-automata",
]
[[package]]
name = "memchr"
version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
[[package]]
name = "memoffset"
version = "0.5.1"
@ -646,6 +670,34 @@ dependencies = [
"rand_core",
]
[[package]]
name = "regex"
version = "1.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
"thread_local",
]
[[package]]
name = "regex-automata"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
dependencies = [
"byteorder",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.6.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8"
[[package]]
name = "rustc_version"
version = "0.2.3"
@ -754,6 +806,15 @@ dependencies = [
"syn",
]
[[package]]
name = "thread_local"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
dependencies = [
"lazy_static",
]
[[package]]
name = "time"
version = "0.1.43"
@ -814,6 +875,9 @@ checksum = "f7b33f8b2ef2ab0c3778c12646d9c42a24f7772bee4cdafc72199644a9f58fdc"
dependencies = [
"ansi_term",
"chrono",
"lazy_static",
"matchers",
"regex",
"sharded-slab",
"tracing-core",
]

View File

@ -39,7 +39,7 @@ ed25519-zebra = "2.0.0"
[dependencies.tracing-subscriber]
version = "0.2"
default-features = false
features = ["ansi", "chrono"]
features = ["ansi", "chrono", "env-filter"]
[profile.release]
lto = true

View File

@ -0,0 +1,15 @@
package=crate_aho_corasick
$(package)_crate_name=aho-corasick
$(package)_version=0.7.13
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_matchers
$(package)_crate_name=matchers
$(package)_version=0.0.1
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_memchr
$(package)_crate_name=memchr
$(package)_version=2.3.3
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_regex
$(package)_crate_name=regex
$(package)_version=1.3.9
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_regex_automata
$(package)_crate_name=regex-automata
$(package)_version=0.1.9
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_regex_syntax
$(package)_crate_name=regex-syntax
$(package)_version=0.6.18
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_thread_local
$(package)_crate_name=thread_local
$(package)_version=1.0.1
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -2,6 +2,7 @@ rust_crates := \
crate_aes \
crate_aesni \
crate_aes_soft \
crate_aho_corasick \
crate_ansi_term \
crate_arrayref \
crate_arrayvec \
@ -50,6 +51,8 @@ rust_crates := \
crate_lazy_static \
crate_libc \
crate_log \
crate_matchers \
crate_memchr \
crate_memoffset \
crate_nodrop \
crate_num_bigint \
@ -66,6 +69,9 @@ rust_crates := \
crate_rand_hc \
crate_rand_xorshift \
crate_rand \
crate_regex_automata \
crate_regex_syntax \
crate_regex \
crate_rustc_version \
crate_scopeguard \
crate_semver_parser \
@ -79,6 +85,7 @@ rust_crates := \
crate_time \
crate_thiserror \
crate_thiserror_impl \
crate_thread_local \
crate_tracing_appender \
crate_tracing_attributes \
crate_tracing_core \

View File

@ -806,16 +806,19 @@ void InitLogging()
fLogTimestamps = GetBoolArg("-logtimestamps", DEFAULT_LOGTIMESTAMPS);
fLogIPs = GetBoolArg("-logips", DEFAULT_LOGIPS);
// Set up the initial filtering directive from the -debug flags.
std::string initialFilter = LogConfigFilter();
if (fPrintToConsole) {
pTracingHandle = tracing_init(nullptr, 0, fLogTimestamps);
pTracingHandle = tracing_init(nullptr, 0, initialFilter.c_str(), fLogTimestamps);
} else {
boost::filesystem::path pathDebug = GetDebugLogPath();
auto pathDebugStr = pathDebug.native();
pTracingHandle = tracing_init(
reinterpret_cast<const codeunit*>(pathDebugStr.c_str()),
pathDebugStr.length(),
fLogTimestamps
);
initialFilter.c_str(),
fLogTimestamps);
}
LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

View File

@ -26,6 +26,7 @@ typedef struct TracingHandle TracingHandle;
TracingHandle* tracing_init(
const codeunit* log_path,
size_t log_path_len,
const char* initial_filter,
bool log_timestamps);
/// Frees a tracing handle returned from `tracing_init`;

View File

@ -34,10 +34,15 @@ pub extern "C" fn tracing_init(
#[cfg(not(target_os = "windows"))] log_path: *const u8,
#[cfg(target_os = "windows")] log_path: *const u16,
log_path_len: usize,
initial_filter: *const c_char,
log_timestamps: bool,
) -> *mut TracingHandle {
let initial_filter = unsafe { CStr::from_ptr(initial_filter) }
.to_str()
.expect("initial filter should be a valid string");
if log_path.is_null() {
tracing_init_stdout(log_timestamps)
tracing_init_stdout(initial_filter, log_timestamps)
} else {
let log_path = unsafe { slice::from_raw_parts(log_path, log_path_len) };
@ -47,12 +52,14 @@ pub extern "C" fn tracing_init(
#[cfg(target_os = "windows")]
let log_path = Path::new(OsString::from_wide(log_path));
tracing_init_file(log_path, log_timestamps)
tracing_init_file(log_path, initial_filter, log_timestamps)
}
}
fn tracing_init_stdout(log_timestamps: bool) -> *mut TracingHandle {
let builder = tracing_subscriber::fmt().with_ansi(true);
fn tracing_init_stdout(initial_filter: &str, log_timestamps: bool) -> *mut TracingHandle {
let builder = tracing_subscriber::fmt()
.with_ansi(true)
.with_env_filter(initial_filter);
if log_timestamps {
builder.init();
@ -63,13 +70,18 @@ fn tracing_init_stdout(log_timestamps: bool) -> *mut TracingHandle {
Box::into_raw(Box::new(TracingHandle { _file_guard: None }))
}
fn tracing_init_file(log_path: &Path, log_timestamps: bool) -> *mut TracingHandle {
fn tracing_init_file(
log_path: &Path,
initial_filter: &str,
log_timestamps: bool,
) -> *mut TracingHandle {
let file_appender =
tracing_appender::rolling::never(log_path.parent().unwrap(), log_path.file_name().unwrap());
let (non_blocking, file_guard) = tracing_appender::non_blocking(file_appender);
let builder = tracing_subscriber::fmt()
.with_ansi(false)
.with_env_filter(initial_filter)
.with_writer(non_blocking);
if log_timestamps {

View File

@ -221,6 +221,25 @@ boost::filesystem::path GetDebugLogPath()
}
}
std::string LogConfigFilter()
{
// With no -debug flags, show errors and LogPrintf lines.
std::string filter = "error,main=info";
auto& categories = mapMultiArgs["-debug"];
std::set<std::string> setCategories(categories.begin(), categories.end());
if (setCategories.count(string("")) != 0 || setCategories.count(string("1")) != 0) {
// Turn on the firehose!
filter = "info";
} else {
for (auto category : setCategories) {
filter += "," + category + "=info";
}
}
return filter;
}
bool LogAcceptCategory(const char* category)
{
if (category != NULL)

View File

@ -74,22 +74,22 @@ inline std::string _(const char* psz)
void SetupEnvironment();
bool SetupNetworking();
/** Returns the filtering directive set by the -debug flags. */
std::string LogConfigFilter();
/** Return true if log accepts specified category */
bool LogAcceptCategory(const char* category);
#define LogPrintf(...) LogPrint(NULL, __VA_ARGS__)
/** Print to debug.log if -debug=category switch is given OR category is NULL. */
#define LogPrint(category, ...) do { \
if (LogAcceptCategory(category)) { \
std::string T_MSG = tfm::format(__VA_ARGS__); \
if (!T_MSG.empty() && T_MSG[T_MSG.size()-1] == '\n') { \
T_MSG.erase(T_MSG.size()-1); \
} \
TracingInfo( \
category == NULL ? "main" : category, \
T_MSG.c_str()); \
} \
#define LogPrint(category, ...) do { \
std::string T_MSG = tfm::format(__VA_ARGS__); \
if (!T_MSG.empty() && T_MSG[T_MSG.size()-1] == '\n') { \
T_MSG.erase(T_MSG.size()-1); \
} \
TracingInfo( \
category == NULL ? "main" : category, \
T_MSG.c_str()); \
} while(0)
#define LogError(category, ...) ([&]() { \