From ea0175562198a0cb886b547aa63827e331b27fbb Mon Sep 17 00:00:00 2001 From: Matej Hrica Date: Thu, 24 Apr 2025 11:47:01 +0200 Subject: [PATCH 1/5] Introduce a new krun_init_log() that replaces krun_set_log_level Introduce a new krun_init_log public API function to allow for much more detailed configuration of logging by the application. The main improvment is is the ability to specify a file descriptor to write the log to. Signed-off-by: Matej Hrica --- include/libkrun.h | 38 +++++++++++++++++++++++ src/libkrun/src/lib.rs | 67 ++++++++++++++++++++++++++++++++++++----- tests/runner/Cargo.toml | 2 +- 3 files changed, 99 insertions(+), 8 deletions(-) diff --git a/include/libkrun.h b/include/libkrun.h index e24132bb7..ffd12135c 100644 --- a/include/libkrun.h +++ b/include/libkrun.h @@ -26,6 +26,44 @@ extern "C" { */ int32_t krun_set_log_level(uint32_t level); + +#define KRUN_LOG_TARGET_DEFAULT -1 + +#define KRUN_LOG_LEVEL_OFF 0 +#define KRUN_LOG_LEVEL_ERROR 1 +#define KRUN_LOG_LEVEL_WARN 2 +#define KRUN_LOG_LEVEL_INFO 3 +#define KRUN_LOG_LEVEL_DEBUG 4 +#define KRUN_LOG_LEVEL_TRACE 5 + +#define KRUN_LOG_STYLE_AUTO 0 +#define KRUN_LOG_STYLE_ALWAYS 1 +#define KRUN_LOG_STYLE_NEVER 2 + +#define KRUN_LOG_OPTION_NO_ENV 1 + +/** + * Initializes logging for the library. + * + * Arguments: + * "target_fd" - File descriptor to write log to. Note that using a file descriptor pointing to a regular file on + * filesystem might slow down the VM. + * Use KRUN_LOG_TARGET_DEFAULT to use the default target for log output (stderr). + * + * "level" - Level is an integer specifying the level of verbosity, higher number means more verbose log. + * The log levels are described by the constants: KRUN_LOG_LEVEL_{OFF, ERROR, WARN, INFO, DEBUG, TRACE} + * + * "style" - Enable/disable usage of terminal escape sequences (to display colors) + * One of: KRUN_LOG_STYLE_{AUTO, ALWAYS, NEVER}. + * + * "options" - Bitmask of logging options, use 0 for default options. + * KRUN_LOG_OPTION_NO_ENV to disallow environment variables to override these settings. + * + * Returns: + * Zero on success or a negative error number on failure. + */ +int32_t krun_init_log(int target_fd, uint32_t level, uint32_t style, uint32_t options); + /** * Creates a configuration context. * diff --git a/src/libkrun/src/lib.rs b/src/libkrun/src/lib.rs index 00ab44f02..a778db2fe 100644 --- a/src/libkrun/src/lib.rs +++ b/src/libkrun/src/lib.rs @@ -8,11 +8,10 @@ use std::env; use std::ffi::CStr; #[cfg(target_os = "linux")] use std::ffi::CString; -#[cfg(all(target_arch = "x86_64", not(feature = "tee")))] use std::fs::File; #[cfg(target_os = "linux")] use std::os::fd::AsRawFd; -use std::os::fd::RawFd; +use std::os::fd::{FromRawFd, RawFd}; use std::path::PathBuf; use std::slice; use std::sync::atomic::{AtomicI32, Ordering}; @@ -27,7 +26,7 @@ use devices::virtio::block::ImageType; use devices::virtio::net::device::VirtioNetBackend; #[cfg(feature = "blk")] use devices::virtio::CacheType; -use env_logger::Env; +use env_logger::{Env, Target}; #[cfg(not(feature = "efi"))] use libc::size_t; use libc::{c_char, c_int}; @@ -301,17 +300,71 @@ impl ContextConfig { static CTX_MAP: Lazy>> = Lazy::new(|| Mutex::new(HashMap::new())); static CTX_IDS: AtomicI32 = AtomicI32::new(0); -#[no_mangle] -pub extern "C" fn krun_set_log_level(level: u32) -> i32 { - let log_level = match level { +fn log_level_to_filter_str(level: u32) -> &'static str { + match level { 0 => "off", 1 => "error", 2 => "warn", 3 => "info", 4 => "debug", _ => "trace", + } +} + +#[no_mangle] +pub extern "C" fn krun_set_log_level(level: u32) -> i32 { + let filter = log_level_to_filter_str(level); + env_logger::Builder::from_env(Env::default().default_filter_or(filter)).init(); + KRUN_SUCCESS +} + +mod log_defs { + pub const KRUN_LOG_STYLE_AUTO: u32 = 0; + pub const KRUN_LOG_STYLE_ALWAYS: u32 = 1; + pub const KRUN_LOG_STYLE_NEVER: u32 = 2; + pub const KRUN_LOG_OPTION_NO_ENV: u32 = 1; +} + +#[allow(clippy::missing_safety_doc)] +#[no_mangle] +pub unsafe extern "C" fn krun_init_log(target: RawFd, level: u32, style: u32, options: u32) -> i32 { + let target = match target { + ..-1 => return -libc::EINVAL, + -1 => Target::default(), + 0 /* stdin */ => return -libc::EINVAL, + 1 /* stdout */ => Target::Stdout, + 2 /* stderr */ => Target::Stderr, + fd => Target::Pipe(Box::new(File::from_raw_fd(fd))), + }; + + let filter = log_level_to_filter_str(level); + + let write_style = match style { + log_defs::KRUN_LOG_STYLE_AUTO => "auto", + log_defs::KRUN_LOG_STYLE_ALWAYS => "always", + log_defs::KRUN_LOG_STYLE_NEVER => "never", + _ => return -libc::EINVAL, + }; + + let use_env = match options { + 0 => true, + log_defs::KRUN_LOG_OPTION_NO_ENV => false, + _ => return -libc::EINVAL, + }; + + let mut builder = if use_env { + env_logger::Builder::from_env( + Env::new() + .default_filter_or(filter) + .default_write_style_or(write_style), + ) + } else { + let mut builder = env_logger::Builder::new(); + builder.parse_filters(filter).parse_write_style(write_style); + builder }; - env_logger::Builder::from_env(Env::default().default_filter_or(log_level)).init(); + builder.target(target).init(); + KRUN_SUCCESS } diff --git a/tests/runner/Cargo.toml b/tests/runner/Cargo.toml index 3b857088c..b74e9ad7c 100644 --- a/tests/runner/Cargo.toml +++ b/tests/runner/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" [dependencies] test_cases = { path = "../test_cases", features = ["host"] } anyhow = "1.0.95" -nix = { version = "0.29.0", features = ["resource"] } +nix = { version = "0.29.0", features = ["resource", "fs"] } macros = { path = "../macros" } clap = { version = "4.5.27", features = ["derive"] } tempdir = "0.3.7" From 1125c458e047f5122afe21901148c5009b660293 Mon Sep 17 00:00:00 2001 From: Matej Hrica Date: Tue, 29 Apr 2025 16:13:32 +0200 Subject: [PATCH 2/5] chroot_vm: Set default log level to "warn" chroot_vm is meant as an example and program to showcase libkrun APIs, we should at least show error messages by default even without RUST_LOG env variable. Signed-off-by: Matej Hrica --- examples/chroot_vm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/chroot_vm.c b/examples/chroot_vm.c index b35119028..708e1cf15 100644 --- a/examples/chroot_vm.c +++ b/examples/chroot_vm.c @@ -217,8 +217,8 @@ int main(int argc, char *const argv[]) return 0; } - // Set the log level to "off". - err = krun_set_log_level(0); + // Set the log level to "warn". + err = krun_set_log_level(2); if (err) { errno = -err; perror("Error configuring log level"); From d6604be428304e44f9eba9cc7460f201344cd38c Mon Sep 17 00:00:00 2001 From: Matej Hrica Date: Wed, 30 Apr 2025 14:40:29 +0200 Subject: [PATCH 3/5] chroot_vm: Support redirecting libkrun log to a pipe Use the newer krun_init_log to support redirecting the log to a pipe. Signed-off-by: Matej Hrica --- examples/chroot_vm.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/examples/chroot_vm.c b/examples/chroot_vm.c index 708e1cf15..8e3b92617 100644 --- a/examples/chroot_vm.c +++ b/examples/chroot_vm.c @@ -6,6 +6,7 @@ */ #include +#include #include #include #include @@ -34,6 +35,8 @@ static void print_help(char *const name) "Usage: %s [OPTIONS] NEWROOT COMMAND [COMMAND_ARGS...]\n" "OPTIONS: \n" " -h --help Show help\n" + " --log=PATH Write libkrun log to file or named pipe at PATH\n" + " --color-log=PATH Write libkrun log to file or named pipe at PATH, use color\n" " --net=NET_MODE Set network mode\n" " --passt-socket=PATH Instead of starting passt, connect to passt socket at PATH" "NET_MODE can be either TSI (default) or PASST\n" @@ -47,6 +50,8 @@ static void print_help(char *const name) static const struct option long_options[] = { { "help", no_argument, NULL, 'h' }, + { "log", required_argument, NULL, 'L' }, + { "color-log", required_argument, NULL, 'C' }, { "net_mode", required_argument, NULL, 'N' }, { "passt-socket", required_argument, NULL, 'P' }, { NULL, 0, NULL, 0 } @@ -54,12 +59,27 @@ static const struct option long_options[] = { struct cmdline { bool show_help; + int log_target; + uint32_t log_style; enum net_mode net_mode; char const *passt_socket_path; char const *new_root; char *const *guest_argv; }; +bool cmdline_set_log_target(struct cmdline *cmdline, const char *arg) { + int fd = open(arg, O_WRONLY); + if (fd < 0) { + perror(arg); + return false; + } + if (cmdline->log_target > 0) { + close(cmdline->log_target); + } + cmdline->log_target = fd; + return true; +} + bool parse_cmdline(int argc, char *const argv[], struct cmdline *cmdline) { assert(cmdline != NULL); @@ -71,6 +91,8 @@ bool parse_cmdline(int argc, char *const argv[], struct cmdline *cmdline) .passt_socket_path = NULL, .new_root = NULL, .guest_argv = NULL, + .log_target = KRUN_LOG_TARGET_DEFAULT, + .log_style = KRUN_LOG_STYLE_AUTO }; int option_index = 0; @@ -81,6 +103,14 @@ bool parse_cmdline(int argc, char *const argv[], struct cmdline *cmdline) case 'h': cmdline->show_help = true; return true; + case 'C': + cmdline->log_style = KRUN_LOG_STYLE_ALWAYS; + /* fall through */ + case 'L': + if (!cmdline_set_log_target(cmdline, optarg)) { + return false; + } + break; case 'N': if (strcasecmp("TSI", optarg) == 0) { cmdline->net_mode = NET_MODE_TSI; @@ -218,7 +248,7 @@ int main(int argc, char *const argv[]) } // Set the log level to "warn". - err = krun_set_log_level(2); + err = krun_init_log(cmdline.log_target, KRUN_LOG_LEVEL_WARN, cmdline.log_style, 0); if (err) { errno = -err; perror("Error configuring log level"); From 871e2e65e01b858e6163247ccd478e06cb8707d2 Mon Sep 17 00:00:00 2001 From: Matej Hrica Date: Wed, 30 Apr 2025 14:44:26 +0200 Subject: [PATCH 4/5] Declare env_logger as dependency only in the top level crate The correct way to use the env_logger crate is to only depend on it the toplevel aplication crate. In other crates we should just use the `log` crate facade (which we already do). Drop the env_logger dependency from all of our internal crates, and just keep it in the the `libkrun` crate. Signed-off-by: Matej Hrica --- Cargo.lock | 4 ---- src/devices/Cargo.toml | 1 - src/hvf/Cargo.toml | 1 - src/utils/Cargo.toml | 1 - src/vmm/Cargo.toml | 1 - 5 files changed, 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index df92864d3..323bd1b0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -406,7 +406,6 @@ dependencies = [ "bitflags 1.3.2", "caps", "crossbeam-channel", - "env_logger", "hvf", "imago", "kvm-bindings", @@ -674,7 +673,6 @@ version = "0.1.0" dependencies = [ "arch", "crossbeam-channel", - "env_logger", "libloading", "log", ] @@ -1712,7 +1710,6 @@ version = "0.1.0" dependencies = [ "bitflags 1.3.2", "crossbeam-channel", - "env_logger", "kvm-bindings", "libc", "log", @@ -1777,7 +1774,6 @@ dependencies = [ "crossbeam-channel", "curl", "devices", - "env_logger", "flate2", "hvf", "kbs-types", diff --git a/src/devices/Cargo.toml b/src/devices/Cargo.toml index f89a929c2..aaf2166de 100644 --- a/src/devices/Cargo.toml +++ b/src/devices/Cargo.toml @@ -17,7 +17,6 @@ virgl_resource_map2 = [] [dependencies] bitflags = "1.2.0" crossbeam-channel = ">=0.5.15" -env_logger = "0.9.0" libc = ">=0.2.39" libloading = "0.8" log = "0.4.0" diff --git a/src/hvf/Cargo.toml b/src/hvf/Cargo.toml index 57b353448..522efc499 100644 --- a/src/hvf/Cargo.toml +++ b/src/hvf/Cargo.toml @@ -8,6 +8,5 @@ edition = "2021" crossbeam-channel = ">=0.5.15" libloading = "0.8" log = "0.4.0" -env_logger = "0.9.0" arch = { path = "../arch" } diff --git a/src/utils/Cargo.toml b/src/utils/Cargo.toml index 56dfbb448..69e4f3c2f 100644 --- a/src/utils/Cargo.toml +++ b/src/utils/Cargo.toml @@ -6,7 +6,6 @@ edition = "2021" [dependencies] bitflags = "1.2.0" -env_logger = "0.9.0" libc = ">=0.2.85" log = "0.4.0" vmm-sys-util = "0.12.1" diff --git a/src/vmm/Cargo.toml b/src/vmm/Cargo.toml index f3f8ce11d..0ddeb5841 100644 --- a/src/vmm/Cargo.toml +++ b/src/vmm/Cargo.toml @@ -15,7 +15,6 @@ snd = [] [dependencies] crossbeam-channel = ">=0.5.15" -env_logger = "0.9.0" flate2 = "1.0.35" libc = ">=0.2.39" linux-loader = { version = "0.13.0", features = ["bzimage", "elf", "pe"] } From c75267750d17b7cc00d39053ced249ac8faec4ca Mon Sep 17 00:00:00 2001 From: Matej Hrica Date: Fri, 2 May 2025 12:36:02 +0200 Subject: [PATCH 5/5] Upgrade env_logger dependency Use newest version of env_logger. This is needed to fix a problem where output to a pipe ignores RUST_LOG_STYLE=always option and colors don't work. Signed-off-by: Matej Hrica --- Cargo.lock | 179 +++++++++++++++++++++++++++++------------ src/libkrun/Cargo.toml | 2 +- 2 files changed, 130 insertions(+), 51 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 323bd1b0d..c44b0e43a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,6 +57,56 @@ dependencies = [ "yansi-term", ] +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.59.0", +] + [[package]] name = "anyhow" version = "1.0.98" @@ -91,17 +141,6 @@ dependencies = [ "syn", ] -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - [[package]] name = "autocfg" version = "1.4.0" @@ -311,6 +350,12 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12170080f3533d6f09a19f81596f836854d0fa4867dc32c8172b8474b4e9de61" +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + [[package]] name = "convert_case" version = "0.6.0" @@ -456,16 +501,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] -name = "env_logger" -version = "0.9.3" +name = "env_filter" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ - "atty", - "humantime", "log", "regex", - "termcolor", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", ] [[package]] @@ -646,27 +701,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "humantime" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" - [[package]] name = "hvf" version = "0.1.0" @@ -738,6 +778,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8972d5be69940353d5347a1344cb375d9b457d6809b428b05bb1ca2fb9ce007" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itertools" version = "0.12.1" @@ -762,6 +808,30 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jiff" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a194df1107f33c79f4f93d02c80798520551949d59dfad22b6157048a88cca93" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c6e1db7ed32c6c71b759497fae34bf7933636f75a251b9e736555da426f6442" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "jobserver" version = "0.1.33" @@ -1065,6 +1135,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + [[package]] name = "openssl" version = "0.10.72" @@ -1179,6 +1255,21 @@ dependencies = [ "utils", ] +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1582,15 +1673,6 @@ version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - [[package]] name = "thiserror" version = "1.0.69" @@ -1704,6 +1786,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "utils" version = "0.1.0" @@ -1895,15 +1983,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/src/libkrun/Cargo.toml b/src/libkrun/Cargo.toml index 32f334a0b..cd1e9aac0 100644 --- a/src/libkrun/Cargo.toml +++ b/src/libkrun/Cargo.toml @@ -17,7 +17,7 @@ virgl_resource_map2 = [] [dependencies] crossbeam-channel = ">=0.5.15" -env_logger = "0.9.0" +env_logger = "0.11" libc = ">=0.2.39" libloading = "0.8" log = "0.4.0"