mirror of
https://github.com/alexgo-io/stacks-puppet-node.git
synced 2026-04-28 19:55:20 +08:00
make slog_json compile-time feature
This commit is contained in:
@@ -60,7 +60,7 @@ prometheus = { version = "0.9", optional = true }
|
||||
integer-sqrt = "0.1.3"
|
||||
slog = "2.5.2"
|
||||
slog-term = "2.6.0"
|
||||
slog-json = "2.3.0"
|
||||
slog-json = { version = "2.3.0", optional = true }
|
||||
|
||||
[dependencies.serde_json]
|
||||
version = "1.0"
|
||||
@@ -91,10 +91,11 @@ assert-json-diff = "1.0.0"
|
||||
criterion = "0.3"
|
||||
|
||||
[features]
|
||||
developer-mode = []
|
||||
default = ["developer-mode"]
|
||||
developer-mode = []
|
||||
monitoring_prom = ["prometheus"]
|
||||
tx_log = []
|
||||
slog_json = ["slog-json"]
|
||||
|
||||
[target.'cfg(all(target_arch = "x86_64", not(target_env = "msvc")))'.dependencies]
|
||||
sha2-asm = "0.5.3"
|
||||
|
||||
@@ -8,7 +8,7 @@ RUN apk add --no-cache musl-dev
|
||||
|
||||
RUN mkdir /out
|
||||
|
||||
RUN cd testnet/stacks-node && cargo build --features "monitoring_prom" --release
|
||||
RUN cd testnet/stacks-node && cargo build --features monitoring_prom,slog_json --release
|
||||
RUN cd testnet/bitcoin-neon-controller && cargo build --release
|
||||
|
||||
RUN cp target/release/stacks-node /out
|
||||
|
||||
@@ -6,7 +6,7 @@ COPY . .
|
||||
|
||||
RUN mkdir /out
|
||||
|
||||
RUN cd testnet/stacks-node && cargo build --features "monitoring_prom" --release
|
||||
RUN cd testnet/stacks-node && cargo build --features monitoring_prom slog_json --release
|
||||
RUN cd testnet/bitcoin-neon-controller && cargo build --release
|
||||
|
||||
RUN cp target/release/stacks-node /out
|
||||
|
||||
@@ -43,6 +43,7 @@ extern crate url;
|
||||
|
||||
#[macro_use(o, slog_log, slog_trace, slog_debug, slog_info, slog_warn, slog_error)]
|
||||
extern crate slog;
|
||||
#[cfg(feature = "slog_json")]
|
||||
extern crate slog_json;
|
||||
extern crate slog_term;
|
||||
|
||||
|
||||
@@ -14,13 +14,14 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use slog::{Drain, Logger, FnValue, Record, KV, BorrowedKV, OwnedKVList};
|
||||
use slog_term::{Decorator, Serializer, RecordDecorator};
|
||||
use slog::{BorrowedKV, Drain, FnValue, Logger, OwnedKVList, Record, KV};
|
||||
use slog_term::{CountingWriter, Decorator, RecordDecorator, Serializer};
|
||||
use std::env;
|
||||
use std::sync::Mutex;
|
||||
use std::io;
|
||||
use std::time::{SystemTime, Duration};
|
||||
use std::io::Write;
|
||||
use std::sync::Mutex;
|
||||
use std::thread;
|
||||
use std::time::{Duration, SystemTime};
|
||||
|
||||
lazy_static! {
|
||||
pub static ref LOGGER: Logger = make_logger();
|
||||
@@ -30,15 +31,22 @@ struct TermFormat<D: Decorator> {
|
||||
decorator: D,
|
||||
}
|
||||
|
||||
fn print_msg_header(rd: &mut dyn RecordDecorator, record: &Record) -> io::Result<bool> {
|
||||
fn print_msg_header(mut rd: &mut dyn RecordDecorator, record: &Record) -> io::Result<bool> {
|
||||
rd.start_level()?;
|
||||
write!(rd, "{}", record.level().as_short_str())?;
|
||||
rd.start_whitespace()?;
|
||||
write!(rd, " ")?;
|
||||
|
||||
rd.start_timestamp()?;
|
||||
let elapsed = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap_or(Duration::from_secs(0));
|
||||
write!(rd, "[{:5}.{:06}]", elapsed.as_secs(), elapsed.subsec_nanos()/1000)?;
|
||||
let elapsed = SystemTime::now()
|
||||
.duration_since(SystemTime::UNIX_EPOCH)
|
||||
.unwrap_or(Duration::from_secs(0));
|
||||
write!(
|
||||
rd,
|
||||
"[{:5}.{:06}]",
|
||||
elapsed.as_secs(),
|
||||
elapsed.subsec_nanos() / 1000
|
||||
)?;
|
||||
write!(rd, " ")?;
|
||||
write!(rd, "[{}:{}]", record.file(), record.line())?;
|
||||
write!(rd, " ")?;
|
||||
@@ -48,8 +56,9 @@ fn print_msg_header(rd: &mut dyn RecordDecorator, record: &Record) -> io::Result
|
||||
write!(rd, " ")?;
|
||||
|
||||
rd.start_msg()?;
|
||||
write!(rd, "{}", record.msg())?;
|
||||
Ok(false)
|
||||
let mut count_rd = CountingWriter::new(&mut rd);
|
||||
write!(count_rd, "{}", record.msg())?;
|
||||
Ok(count_rd.count() != 0)
|
||||
}
|
||||
|
||||
impl<D: Decorator> Drain for TermFormat<D> {
|
||||
@@ -68,14 +77,9 @@ impl<D: Decorator> TermFormat<D> {
|
||||
|
||||
fn format_full(&self, record: &Record, values: &OwnedKVList) -> io::Result<()> {
|
||||
self.decorator.with_record(record, values, |decorator| {
|
||||
let comma_needed =
|
||||
print_msg_header(decorator, record)?;
|
||||
let comma_needed = print_msg_header(decorator, record)?;
|
||||
{
|
||||
let mut serializer = Serializer::new(
|
||||
decorator,
|
||||
comma_needed,
|
||||
true
|
||||
);
|
||||
let mut serializer = Serializer::new(decorator, comma_needed, true);
|
||||
|
||||
record.kv().serialize(record, &mut serializer)?;
|
||||
|
||||
@@ -94,24 +98,32 @@ impl<D: Decorator> TermFormat<D> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "slog_json")]
|
||||
fn make_json_logger() -> Logger {
|
||||
let def_keys = o!("file" => FnValue(move |info| {
|
||||
info.file()
|
||||
}),
|
||||
"line" => FnValue(move |info| {
|
||||
info.line()
|
||||
}),
|
||||
"thread" => FnValue(move |_| {
|
||||
format!("{:?}", thread::current().id())
|
||||
}),
|
||||
);
|
||||
|
||||
let drain = Mutex::new(slog_json::Json::default(std::io::stderr())).map(slog::Fuse);
|
||||
let filtered_drain = slog::LevelFilter::new(drain, get_loglevel()).fuse();
|
||||
slog::Logger::root(filtered_drain, def_keys)
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "slog_json"))]
|
||||
fn make_json_logger() -> Logger {
|
||||
panic!("Tried to construct JSON logger, but stacks-blockchain built without slog_json feature enabled.")
|
||||
}
|
||||
|
||||
fn make_logger() -> Logger {
|
||||
if env::var("BLOCKSTACK_LOG_JSON") == Ok("1".into()) {
|
||||
let def_keys = o!("file" =>
|
||||
FnValue(move |info| {
|
||||
info.file()
|
||||
}),
|
||||
"line" => FnValue(move |info| {
|
||||
info.line()
|
||||
}),
|
||||
"thread" =>
|
||||
FnValue(move |_| {
|
||||
format!("{:?}", thread::current().id())
|
||||
}),
|
||||
);
|
||||
|
||||
let drain = Mutex::new(slog_json::Json::default(std::io::stderr())).map(slog::Fuse);
|
||||
let filtered_drain = slog::LevelFilter::new(drain, get_loglevel()).fuse();
|
||||
slog::Logger::root(filtered_drain, def_keys)
|
||||
make_json_logger()
|
||||
} else {
|
||||
let plain = slog_term::PlainSyncDecorator::new(std::io::stdout());
|
||||
let drain = TermFormat::new(plain);
|
||||
|
||||
@@ -32,5 +32,6 @@ path = "src/main.rs"
|
||||
|
||||
[features]
|
||||
monitoring_prom = ["stacks/monitoring_prom"]
|
||||
slog_json = ["stacks/slog_json"]
|
||||
tx-log = ["stacks/tx_log"]
|
||||
default = []
|
||||
|
||||
Reference in New Issue
Block a user