feat: redirect stderr to stderr log file (#494)

Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
Gaius 2024-05-24 15:29:21 +08:00 committed by GitHub
parent 59fb6b2ad5
commit af555c337c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 41 additions and 22 deletions

18
Cargo.lock generated
View File

@ -959,7 +959,7 @@ dependencies = [
[[package]] [[package]]
name = "dragonfly-client" name = "dragonfly-client"
version = "0.1.69" version = "0.1.70"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"bytes", "bytes",
@ -1012,7 +1012,7 @@ dependencies = [
"tower", "tower",
"tracing", "tracing",
"tracing-appender", "tracing-appender",
"tracing-log 0.1.4", "tracing-log 0.2.0",
"tracing-opentelemetry", "tracing-opentelemetry",
"tracing-subscriber", "tracing-subscriber",
"url", "url",
@ -1022,7 +1022,7 @@ dependencies = [
[[package]] [[package]]
name = "dragonfly-client-backend" name = "dragonfly-client-backend"
version = "0.1.69" version = "0.1.70"
dependencies = [ dependencies = [
"dragonfly-client-core", "dragonfly-client-core",
"futures", "futures",
@ -1040,7 +1040,7 @@ dependencies = [
[[package]] [[package]]
name = "dragonfly-client-config" name = "dragonfly-client-config"
version = "0.1.69" version = "0.1.70"
dependencies = [ dependencies = [
"dragonfly-client-core", "dragonfly-client-core",
"home", "home",
@ -1059,7 +1059,7 @@ dependencies = [
[[package]] [[package]]
name = "dragonfly-client-core" name = "dragonfly-client-core"
version = "0.1.69" version = "0.1.70"
dependencies = [ dependencies = [
"libloading", "libloading",
"reqwest", "reqwest",
@ -1070,7 +1070,7 @@ dependencies = [
[[package]] [[package]]
name = "dragonfly-client-init" name = "dragonfly-client-init"
version = "0.1.69" version = "0.1.70"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"clap", "clap",
@ -1086,7 +1086,7 @@ dependencies = [
[[package]] [[package]]
name = "dragonfly-client-storage" name = "dragonfly-client-storage"
version = "0.1.69" version = "0.1.70"
dependencies = [ dependencies = [
"base16ct", "base16ct",
"blake3", "blake3",
@ -1110,7 +1110,7 @@ dependencies = [
[[package]] [[package]]
name = "dragonfly-client-util" name = "dragonfly-client-util"
version = "0.1.69" version = "0.1.70"
dependencies = [ dependencies = [
"dragonfly-api", "dragonfly-api",
"dragonfly-client-core", "dragonfly-client-core",
@ -1568,7 +1568,7 @@ dependencies = [
[[package]] [[package]]
name = "hdfs" name = "hdfs"
version = "0.1.69" version = "0.1.70"
dependencies = [ dependencies = [
"dragonfly-client-backend", "dragonfly-client-backend",
"dragonfly-client-core", "dragonfly-client-core",

View File

@ -12,7 +12,7 @@ members = [
] ]
[workspace.package] [workspace.package]
version = "0.1.69" version = "0.1.70"
authors = ["The Dragonfly Developers"] authors = ["The Dragonfly Developers"]
homepage = "https://d7y.io/" homepage = "https://d7y.io/"
repository = "https://github.com/dragonflyoss/client.git" repository = "https://github.com/dragonflyoss/client.git"
@ -22,13 +22,13 @@ readme = "README.md"
edition = "2021" edition = "2021"
[workspace.dependencies] [workspace.dependencies]
dragonfly-client = { path = "dragonfly-client", version = "0.1.69" } dragonfly-client = { path = "dragonfly-client", version = "0.1.70" }
dragonfly-client-core = { path = "dragonfly-client-core", version = "0.1.69" } dragonfly-client-core = { path = "dragonfly-client-core", version = "0.1.70" }
dragonfly-client-config = { path = "dragonfly-client-config", version = "0.1.69" } dragonfly-client-config = { path = "dragonfly-client-config", version = "0.1.70" }
dragonfly-client-storage = { path = "dragonfly-client-storage", version = "0.1.69" } dragonfly-client-storage = { path = "dragonfly-client-storage", version = "0.1.70" }
dragonfly-client-backend = { path = "dragonfly-client-backend", version = "0.1.69" } dragonfly-client-backend = { path = "dragonfly-client-backend", version = "0.1.70" }
dragonfly-client-util = { path = "dragonfly-client-util", version = "0.1.69" } dragonfly-client-util = { path = "dragonfly-client-util", version = "0.1.70" }
dragonfly-client-init = { path = "dragonfly-client-init", version = "0.1.69" } dragonfly-client-init = { path = "dragonfly-client-init", version = "0.1.70" }
thiserror = "1.0" thiserror = "1.0"
dragonfly-api = "2.0.113" dragonfly-api = "2.0.113"
reqwest = { version = "0.11.27", features = ["stream", "native-tls", "default-tls", "rustls-tls"] } reqwest = { version = "0.11.27", features = ["stream", "native-tls", "default-tls", "rustls-tls"] }

View File

@ -54,7 +54,7 @@ http.workspace = true
openssl.workspace = true openssl.workspace = true
clap.workspace = true clap.workspace = true
anyhow.workspace = true anyhow.workspace = true
tracing-log = "0.1" tracing-log = "0.2"
tracing-subscriber = { version = "0.3", features = ["env-filter"] } tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tracing-appender = "0.2.3" tracing-appender = "0.2.3"
tracing-opentelemetry = "0.18.0" tracing-opentelemetry = "0.18.0"

View File

@ -15,7 +15,9 @@
*/ */
use opentelemetry::sdk::propagation::TraceContextPropagator; use opentelemetry::sdk::propagation::TraceContextPropagator;
use std::path::PathBuf; use std::fs::OpenOptions;
use std::os::unix::io::AsRawFd;
use std::path::{Path, PathBuf};
use tracing::{info, Level}; use tracing::{info, Level};
use tracing_appender::non_blocking::WorkerGuard; use tracing_appender::non_blocking::WorkerGuard;
use tracing_appender::rolling::{RollingFileAppender, Rotation}; use tracing_appender::rolling::{RollingFileAppender, Rotation};
@ -71,16 +73,16 @@ pub fn init_tracing(
.with_thread_names(false) .with_thread_names(false)
.with_thread_ids(false) .with_thread_ids(false)
.compact(); .compact();
guards.push(rolling_writer_guard); guards.push(rolling_writer_guard);
// Setup env filter for log level.
let env_filter = EnvFilter::try_from_default_env() let env_filter = EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::default().add_directive(log_level.into())); .unwrap_or_else(|_| EnvFilter::default().add_directive(log_level.into()));
let subscriber = Registry::default() let subscriber = Registry::default()
.with(env_filter) .with(env_filter)
.with(stdout_logging_layer) .with(file_logging_layer)
.with(file_logging_layer); .with(stdout_logging_layer);
// Setup jaeger layer. // Setup jaeger layer.
if let Some(jaeger_addr) = jaeger_addr { if let Some(jaeger_addr) = jaeger_addr {
@ -108,5 +110,22 @@ pub fn init_tracing(
log_level log_level
); );
// Redirect stderr to file.
redirect_stderr_to_file(log_dir);
guards guards
} }
// Redirect stderr to file.
fn redirect_stderr_to_file(log_dir: &Path) {
let log_path = log_dir.join("stderr.log");
let file = OpenOptions::new()
.create(true)
.append(true)
.open(log_path)
.unwrap();
unsafe {
libc::dup2(file.as_raw_fd(), libc::STDERR_FILENO);
}
}