From 764af406d9ac2185a7c0d5fd4c27fbac0caf0329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Thu, 20 Jun 2024 16:47:17 +0200 Subject: [PATCH 01/11] Add environment variable for logging to file Fixes #795 --- Cargo.lock | 25 +++++++ crates/stackable-operator/Cargo.toml | 1 + crates/stackable-operator/src/logging/mod.rs | 75 +++++++++++++++++++- 3 files changed, 99 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cd65ed848..ae26ee287 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3100,6 +3100,7 @@ dependencies = [ "time", "tokio", "tracing", + "tracing-appender", "tracing-opentelemetry", "tracing-subscriber", "url", @@ -3329,10 +3330,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", + "itoa", "num-conv", "powerfmt", "serde", "time-core", + "time-macros", ] [[package]] @@ -3341,6 +3344,16 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.7.6" @@ -3555,6 +3568,18 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.27" diff --git a/crates/stackable-operator/Cargo.toml b/crates/stackable-operator/Cargo.toml index 206be686a..cfa45a184 100644 --- a/crates/stackable-operator/Cargo.toml +++ b/crates/stackable-operator/Cargo.toml @@ -42,6 +42,7 @@ tracing-opentelemetry.workspace = true tracing-subscriber.workspace = true tracing.workspace = true url.workspace = true +tracing-appender = "0.2.3" [dev-dependencies] rstest.workspace = true diff --git a/crates/stackable-operator/src/logging/mod.rs b/crates/stackable-operator/src/logging/mod.rs index 00296b8fd..fba1c5d2d 100644 --- a/crates/stackable-operator/src/logging/mod.rs +++ b/crates/stackable-operator/src/logging/mod.rs @@ -1,5 +1,19 @@ +use std::{ + io::{sink, Sink}, + path::PathBuf, +}; + use tracing; -use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Registry}; +use tracing_appender::rolling::RollingFileAppender; +use tracing_subscriber::{ + fmt::{ + writer::{EitherWriter, MakeWriterExt as _}, + MakeWriter, + }, + layer::SubscriberExt, + util::SubscriberInitExt, + EnvFilter, Registry, +}; pub mod controller; mod k8s_events; @@ -22,6 +36,9 @@ impl Default for TracingTarget { /// We force users to provide a variable name so it can be different per product. /// We encourage it to be the product name plus `_LOG`, e.g. `FOOBAR_OPERATOR_LOG`. /// If no environment variable is provided, the maximum log level is set to INFO. +/// +/// Log output can be copied to a file by setting `{env}_DIRECTORY` (e.g. `FOOBAR_OPERATOR_DIRECTORY`) +/// to a directory path. This file will be rotated regularly. pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarget) { let filter = match EnvFilter::try_from_env(env) { Ok(env_filter) => env_filter, @@ -29,7 +46,17 @@ pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarg .expect("Failed to initialize default tracing level to INFO"), }; - let fmt = tracing_subscriber::fmt::layer(); + let file_appender_directory = std::env::var_os(format!("{env}_DIRECTORY")).map(PathBuf::from); + let file_appender = + OptionalMakeWriter::from(file_appender_directory.as_deref().map(|log_dir| { + RollingFileAppender::builder() + .filename_suffix(format!("{app_name}.log")) + .max_log_files(6) + .build(log_dir) + .expect("failed to initialize rolling file appender") + })); + + let fmt = tracing_subscriber::fmt::layer().with_writer(std::io::stdout.and(file_appender)); let registry = Registry::default().with(filter).with(fmt); match tracing_target { @@ -45,6 +72,50 @@ pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarg registry.with(opentelemetry).init(); } } + + // need to delay logging until after tracing is initialized + match file_appender_directory { + Some(dir) => tracing::info!(log.file.directory = %dir.display(), "file logging enabled"), + None => tracing::debug!("file logging disabled, because no log directory set"), + } +} + +/// Like [`EitherWriter`] but implements [`MakeWriter`] instead of [`std::io::Write`]. +/// For selecting writers depending on dynamic configuration. +enum EitherMakeWriter { + A(A), + B(B), +} +impl<'a, A, B> MakeWriter<'a> for EitherMakeWriter +where + A: MakeWriter<'a>, + B: MakeWriter<'a>, +{ + type Writer = EitherWriter; + + fn make_writer(&'a self) -> Self::Writer { + match self { + Self::A(a) => EitherWriter::A(a.make_writer()), + Self::B(b) => EitherWriter::B(b.make_writer()), + } + } + + fn make_writer_for(&'a self, meta: &tracing::Metadata<'_>) -> Self::Writer { + match self { + Self::A(a) => EitherWriter::A(a.make_writer_for(meta)), + Self::B(b) => EitherWriter::B(b.make_writer_for(meta)), + } + } +} + +type OptionalMakeWriter = EitherMakeWriter Sink>; +impl From> for OptionalMakeWriter { + fn from(value: Option) -> Self { + match value { + Some(t) => Self::A(t), + None => Self::B(sink), + } + } } #[cfg(test)] From c8a7e8bd04472f8e20218622d29b43371fcb2d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Wed, 26 Jun 2024 16:21:13 +0200 Subject: [PATCH 02/11] Actually print log directory --- crates/stackable-operator/src/logging/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/stackable-operator/src/logging/mod.rs b/crates/stackable-operator/src/logging/mod.rs index fba1c5d2d..24c4ecf41 100644 --- a/crates/stackable-operator/src/logging/mod.rs +++ b/crates/stackable-operator/src/logging/mod.rs @@ -75,7 +75,7 @@ pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarg // need to delay logging until after tracing is initialized match file_appender_directory { - Some(dir) => tracing::info!(log.file.directory = %dir.display(), "file logging enabled"), + Some(dir) => tracing::info!(directory = %dir.display(), "file logging enabled"), None => tracing::debug!("file logging disabled, because no log directory set"), } } From 5dd3760898d9d678946e2a5354c8095e418419fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Wed, 26 Jun 2024 16:21:24 +0200 Subject: [PATCH 03/11] Reconfigure Vector to read OPA bundle builder logs without multilog --- crates/stackable-operator/src/product_logging/framework.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/stackable-operator/src/product_logging/framework.rs b/crates/stackable-operator/src/product_logging/framework.rs index b44f30d02..dbf2e6820 100644 --- a/crates/stackable-operator/src/product_logging/framework.rs +++ b/crates/stackable-operator/src/product_logging/framework.rs @@ -755,8 +755,7 @@ sources: files_opa_bundle_builder: type: file include: - - {STACKABLE_LOG_DIR}/bundle-builder/current - - {STACKABLE_LOG_DIR}/bundle-builder/test + - {STACKABLE_LOG_DIR}/bundle-builder/opa-bundle-builder.log files_opa_json: type: file From 30df36f87478aa9ebe933e0313d15a0792682f62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Wed, 26 Jun 2024 17:27:24 +0200 Subject: [PATCH 04/11] Log to file as JSON --- Cargo.lock | 13 +++ Cargo.toml | 2 +- crates/stackable-operator/src/logging/mod.rs | 93 ++++++------------- .../src/product_logging/framework.rs | 53 ++++++++--- 4 files changed, 79 insertions(+), 82 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ae26ee287..3fc9ec50d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3630,6 +3630,16 @@ dependencies = [ "web-time", ] +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -3640,12 +3650,15 @@ dependencies = [ "nu-ansi-term", "once_cell", "regex", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", + "tracing-serde", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index deb03afa8..d360e4dc0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -68,7 +68,7 @@ tower = "0.4.13" tower-http = { version = "0.5.2", features = ["trace"] } tracing = "0.1.40" tracing-opentelemetry = "0.23.0" -tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } +tracing-subscriber = { version = "0.3.18", features = ["env-filter", "json"] } url = { version = "2.5.0", features = ["serde"] } x509-cert = { version = "0.2.5", features = ["builder"] } # NOTE (@Techassi): This was previously bumped to 1.8.0 in 6d6615b, but that diff --git a/crates/stackable-operator/src/logging/mod.rs b/crates/stackable-operator/src/logging/mod.rs index 24c4ecf41..fbf11aa7d 100644 --- a/crates/stackable-operator/src/logging/mod.rs +++ b/crates/stackable-operator/src/logging/mod.rs @@ -1,19 +1,8 @@ -use std::{ - io::{sink, Sink}, - path::PathBuf, -}; +use std::path::PathBuf; use tracing; use tracing_appender::rolling::RollingFileAppender; -use tracing_subscriber::{ - fmt::{ - writer::{EitherWriter, MakeWriterExt as _}, - MakeWriter, - }, - layer::SubscriberExt, - util::SubscriberInitExt, - EnvFilter, Registry, -}; +use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Registry}; pub mod controller; mod k8s_events; @@ -46,21 +35,21 @@ pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarg .expect("Failed to initialize default tracing level to INFO"), }; - let file_appender_directory = std::env::var_os(format!("{env}_DIRECTORY")).map(PathBuf::from); - let file_appender = - OptionalMakeWriter::from(file_appender_directory.as_deref().map(|log_dir| { - RollingFileAppender::builder() - .filename_suffix(format!("{app_name}.log")) - .max_log_files(6) - .build(log_dir) - .expect("failed to initialize rolling file appender") - })); - - let fmt = tracing_subscriber::fmt::layer().with_writer(std::io::stdout.and(file_appender)); - let registry = Registry::default().with(filter).with(fmt); + let terminal_fmt = tracing_subscriber::fmt::layer(); - match tracing_target { - TracingTarget::None => registry.init(), + let file_appender_directory = std::env::var_os(format!("{env}_DIRECTORY")).map(PathBuf::from); + let file_fmt = file_appender_directory.as_deref().map(|log_dir| { + let file_appender = RollingFileAppender::builder() + .filename_suffix(format!("{app_name}.log.json")) + .max_log_files(6) + .build(log_dir) + .expect("failed to initialize rolling file appender"); + tracing_subscriber::fmt::layer() + .json() + .with_writer(file_appender) + }); + + let jaeger = match tracing_target { TracingTarget::Jaeger => { // FIXME (@Techassi): Replace with opentelemetry_otlp #[allow(deprecated)] @@ -69,9 +58,17 @@ pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarg .install_batch(opentelemetry_sdk::runtime::Tokio) .expect("Failed to initialize Jaeger pipeline"); let opentelemetry = tracing_opentelemetry::layer().with_tracer(jaeger); - registry.with(opentelemetry).init(); + Some(opentelemetry) } - } + TracingTarget::None => None, + }; + + Registry::default() + .with(filter) + .with(terminal_fmt) + .with(file_fmt) + .with(jaeger) + .init(); // need to delay logging until after tracing is initialized match file_appender_directory { @@ -80,44 +77,6 @@ pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarg } } -/// Like [`EitherWriter`] but implements [`MakeWriter`] instead of [`std::io::Write`]. -/// For selecting writers depending on dynamic configuration. -enum EitherMakeWriter { - A(A), - B(B), -} -impl<'a, A, B> MakeWriter<'a> for EitherMakeWriter -where - A: MakeWriter<'a>, - B: MakeWriter<'a>, -{ - type Writer = EitherWriter; - - fn make_writer(&'a self) -> Self::Writer { - match self { - Self::A(a) => EitherWriter::A(a.make_writer()), - Self::B(b) => EitherWriter::B(b.make_writer()), - } - } - - fn make_writer_for(&'a self, meta: &tracing::Metadata<'_>) -> Self::Writer { - match self { - Self::A(a) => EitherWriter::A(a.make_writer_for(meta)), - Self::B(b) => EitherWriter::B(b.make_writer_for(meta)), - } - } -} - -type OptionalMakeWriter = EitherMakeWriter Sink>; -impl From> for OptionalMakeWriter { - fn from(value: Option) -> Self { - match value { - Some(t) => Self::A(t), - None => Self::B(sink), - } - } -} - #[cfg(test)] mod test { diff --git a/crates/stackable-operator/src/product_logging/framework.rs b/crates/stackable-operator/src/product_logging/framework.rs index dbf2e6820..400f80bc1 100644 --- a/crates/stackable-operator/src/product_logging/framework.rs +++ b/crates/stackable-operator/src/product_logging/framework.rs @@ -755,7 +755,7 @@ sources: files_opa_bundle_builder: type: file include: - - {STACKABLE_LOG_DIR}/bundle-builder/opa-bundle-builder.log + - {STACKABLE_LOG_DIR}/bundle-builder/opa-bundle-builder.log.json files_opa_json: type: file @@ -777,33 +777,58 @@ transforms: .message = "" .errors = [] - event, err = parse_regex(strip_whitespace(strip_ansi_escape_codes(raw_message)), r'(?P[0-9-:.TZ]+)[ ]+(?P\w+)[ ]+(?P.+):[ ]+(?P.*)') + parsed_event, err = parse_json(raw_message) if err != null {{ - error = "Log event not parsable: " + err + error = "JSON not parsable: " + err + .errors = push(.errors, error) + log(error, level: "warn") + .message = raw_message + }} else if !is_object(parsed_event) {{ + error = "Parsed event is not a JSON object." .errors = push(.errors, error) log(error, level: "warn") .message = raw_message }} else {{ - parsed_timestamp, err = parse_timestamp(event.timestamp, "%Y-%m-%dT%H:%M:%S.%6fZ") + event = object!(parsed_event) + + timestamp_string, err = string(event.timestamp) if err == null {{ - .timestamp = parsed_timestamp - }} else {{ - .errors = push(.errors, "Timestamp not parsable, using current time instead: " + err) + parsed_timestamp, err = parse_timestamp(timestamp_string, "%+") + if err == null {{ + .timestamp = parsed_timestamp + }} else {{ + .errors = push(.errors, "Timestamp not parsable, trying current time instead: " + err) + }} }} - level = string!(event.level) - if includes(["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"], level) {{ - .level = level - }} else {{ + .logger, err = string(event.target) + if err != null || is_empty(.logger) {{ + .errors = push(.errors, "Logger/target not found.") + }} + + level, err = string(event.level) + if err != null {{ + .errors = push(.errors, "Level not found, using \"" + .level + "\" instead.") + }} else if !includes(["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"], upcase(level)) {{ .errors = push(.errors, "Level \"" + level + "\" unknown, using \"" + .level + "\" instead.") + }} else {{ + .level = upcase(level) }} - .logger = string!(event.logger) + fields, err = object(event.fields) + if err != null {{ + .errors = push(.errors, "Fields are not an object.") + }} - .message = string!(event.message) - if is_empty(.message) {{ + .message, err = string(fields.message) + if err != null || is_empty(.message) {{ .errors = push(.errors, "Message not found.") }} + + del(fields.message) + + other_fields = encode_key_value(fields, field_delimiter: "\n") + .message = join!(compact([.message, other_fields]), "\n\n") }} processed_files_opa_json: From 8d9b1900982dbac253a6814d3bb0e1097e199d80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Wed, 26 Jun 2024 17:37:21 +0200 Subject: [PATCH 05/11] Changelog --- crates/stackable-operator/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 2cd58c2a3..ef2db8603 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added + +- Added support for logging to files ([#814]). + ### Changed - BREAKING: Bump `kube` to 0.92.0. This required changes in a unit test, because @@ -12,6 +16,7 @@ All notable changes to this project will be documented in this file. - [Blog Post - Breaking Change](https://kube.rs/blog/2024/06/11/watcher-memory-improvements/#breaking-change) - [kube#1494](https://github.com/kube-rs/kube/pull/1494) - [kube#1504](https://github.com/kube-rs/kube/pull/1504) +- Changed OPA Bundle Builder Vector config to read from the new log-to-file setup ([#814]). ### Fixed @@ -19,6 +24,7 @@ All notable changes to this project will be documented in this file. [#804]: https://github.com/stackabletech/operator-rs/pull/804 [#812]: https://github.com/stackabletech/operator-rs/pull/812 +[#814]: https://github.com/stackabletech/operator-rs/pull/814 ## [0.69.3] - 2024-06-12 From 669909cae484fdc46a8e0b4d15703a674511cd1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Thu, 27 Jun 2024 12:26:18 +0200 Subject: [PATCH 06/11] Move tracing-appender dependency to workspace --- Cargo.toml | 1 + crates/stackable-operator/Cargo.toml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 798376ef4..1f885cbc9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -67,6 +67,7 @@ tokio-test = "0.4.4" tower = "0.4.13" tower-http = { version = "0.5.2", features = ["trace"] } tracing = "0.1.40" +tracing-appender = "0.2.3" tracing-opentelemetry = "0.24.0" tracing-subscriber = { version = "0.3.18", features = ["env-filter", "json"] } url = { version = "2.5.0", features = ["serde"] } diff --git a/crates/stackable-operator/Cargo.toml b/crates/stackable-operator/Cargo.toml index cfa45a184..79505b7a2 100644 --- a/crates/stackable-operator/Cargo.toml +++ b/crates/stackable-operator/Cargo.toml @@ -38,11 +38,11 @@ snafu.workspace = true strum.workspace = true time = { workspace = true, optional = true } tokio.workspace = true +tracing.workspace = true +tracing-appender.workspace = true tracing-opentelemetry.workspace = true tracing-subscriber.workspace = true -tracing.workspace = true url.workspace = true -tracing-appender = "0.2.3" [dev-dependencies] rstest.workspace = true From 2c5e3548b0437bb9d6c9ff71c783c8a328fdd20c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Thu, 27 Jun 2024 15:49:12 +0200 Subject: [PATCH 07/11] Reenable hourly rotation --- crates/stackable-operator/src/logging/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/stackable-operator/src/logging/mod.rs b/crates/stackable-operator/src/logging/mod.rs index fbf11aa7d..6e84dd25b 100644 --- a/crates/stackable-operator/src/logging/mod.rs +++ b/crates/stackable-operator/src/logging/mod.rs @@ -1,7 +1,7 @@ use std::path::PathBuf; use tracing; -use tracing_appender::rolling::RollingFileAppender; +use tracing_appender::rolling::{RollingFileAppender, Rotation}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Registry}; pub mod controller; @@ -40,6 +40,7 @@ pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarg let file_appender_directory = std::env::var_os(format!("{env}_DIRECTORY")).map(PathBuf::from); let file_fmt = file_appender_directory.as_deref().map(|log_dir| { let file_appender = RollingFileAppender::builder() + .rotation(Rotation::HOURLY) .filename_suffix(format!("{app_name}.log.json")) .max_log_files(6) .build(log_dir) From fecbf885c419177b579b2c95272b92cdf4f99454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Wed, 24 Jul 2024 14:00:49 +0200 Subject: [PATCH 08/11] Move changelog entry to unreleased --- crates/stackable-operator/CHANGELOG.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 8e8d43984..0321cb10a 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Changed + +- Changed OPA Bundle Builder Vector config to read from the new log-to-file setup ([#814]). + +[#814]: https://github.com/stackabletech/operator-rs/pull/814 + ## [0.70.0] - 2024-07-10 ### Added @@ -20,7 +26,6 @@ All notable changes to this project will be documented in this file. - [kube#1494](https://github.com/kube-rs/kube/pull/1494) - [kube#1504](https://github.com/kube-rs/kube/pull/1504) - Upgrade opentelemetry crates ([#811]). -- Changed OPA Bundle Builder Vector config to read from the new log-to-file setup ([#814]). - Bump rust-toolchain to 1.79.0 ([#822]) ### Fixed @@ -32,7 +37,6 @@ All notable changes to this project will be documented in this file. [#804]: https://github.com/stackabletech/operator-rs/pull/804 [#811]: https://github.com/stackabletech/operator-rs/pull/811 [#812]: https://github.com/stackabletech/operator-rs/pull/812 -[#814]: https://github.com/stackabletech/operator-rs/pull/814 [#817]: https://github.com/stackabletech/operator-rs/pull/817 [#818]: https://github.com/stackabletech/operator-rs/pull/818 [#819]: https://github.com/stackabletech/operator-rs/pull/819 From 31d8fea9717ed3001a55ccb950168bc1aca4e488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Thu, 25 Jul 2024 02:30:14 +0200 Subject: [PATCH 09/11] Generalize bundle builder Vector rule --- crates/stackable-operator/src/logging/mod.rs | 2 +- .../stackable-operator/src/product_logging/framework.rs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/stackable-operator/src/logging/mod.rs b/crates/stackable-operator/src/logging/mod.rs index 6e84dd25b..d623fdf29 100644 --- a/crates/stackable-operator/src/logging/mod.rs +++ b/crates/stackable-operator/src/logging/mod.rs @@ -41,7 +41,7 @@ pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarg let file_fmt = file_appender_directory.as_deref().map(|log_dir| { let file_appender = RollingFileAppender::builder() .rotation(Rotation::HOURLY) - .filename_suffix(format!("{app_name}.log.json")) + .filename_suffix(format!("{app_name}.tracing-rs.json")) .max_log_files(6) .build(log_dir) .expect("failed to initialize rolling file appender"); diff --git a/crates/stackable-operator/src/product_logging/framework.rs b/crates/stackable-operator/src/product_logging/framework.rs index 400f80bc1..72d699e72 100644 --- a/crates/stackable-operator/src/product_logging/framework.rs +++ b/crates/stackable-operator/src/product_logging/framework.rs @@ -752,10 +752,10 @@ sources: include: - {STACKABLE_LOG_DIR}/*/*.airlift.json - files_opa_bundle_builder: + files_tracing_rs: type: file include: - - {STACKABLE_LOG_DIR}/bundle-builder/opa-bundle-builder.log.json + - {STACKABLE_LOG_DIR}/*/*.tracing-rs.json files_opa_json: type: file @@ -764,9 +764,9 @@ sources: - {STACKABLE_LOG_DIR}/opa/test transforms: - processed_files_opa_bundle_builder: + processed_files_tracing_rs: inputs: - - files_opa_bundle_builder + - files_tracing_rs type: remap source: | raw_message = string!(.message) From 43d3baec1c670926ca24d9bb92a24eac3f074970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Thu, 25 Jul 2024 11:52:27 +0200 Subject: [PATCH 10/11] More changelog fixup --- crates/stackable-operator/CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 0321cb10a..33eefab24 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added + +- Added support for logging to files ([#814]). + ### Changed - Changed OPA Bundle Builder Vector config to read from the new log-to-file setup ([#814]). @@ -15,7 +19,6 @@ All notable changes to this project will be documented in this file. ### Added - Added `ProductImage::product_version` utility function ([#817], [#818]) -- Added support for logging to files ([#814]). ### Changed From 79d6adf2dbe66aa2ca45b12c61290d9f0ea190ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Thu, 25 Jul 2024 16:05:22 +0200 Subject: [PATCH 11/11] Update crates/stackable-operator/src/logging/mod.rs Co-authored-by: Siegfried Weber --- crates/stackable-operator/src/logging/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/stackable-operator/src/logging/mod.rs b/crates/stackable-operator/src/logging/mod.rs index d623fdf29..e9c5eb5b4 100644 --- a/crates/stackable-operator/src/logging/mod.rs +++ b/crates/stackable-operator/src/logging/mod.rs @@ -41,7 +41,8 @@ pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarg let file_fmt = file_appender_directory.as_deref().map(|log_dir| { let file_appender = RollingFileAppender::builder() .rotation(Rotation::HOURLY) - .filename_suffix(format!("{app_name}.tracing-rs.json")) + .filename_prefix(app_name.to_string()) + .filename_suffix("tracing-rs.json") .max_log_files(6) .build(log_dir) .expect("failed to initialize rolling file appender");