Use a tracing EnvFilter directive for -debug flags
This commit is contained in:
parent
d5de95f170
commit
2b7d824714
|
@ -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",
|
||||
]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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 \
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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`;
|
||||
|
|
|
@ -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 {
|
||||
|
|
19
src/util.cpp
19
src/util.cpp
|
@ -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)
|
||||
|
|
20
src/util.h
20
src/util.h
|
@ -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, ...) ([&]() { \
|
||||
|
|
Loading…
Reference in New Issue