diff --git a/src/db_options.rs b/src/db_options.rs index 56a81cb..d3594e5 100644 --- a/src/db_options.rs +++ b/src/db_options.rs @@ -3260,6 +3260,17 @@ impl Options { } } + /// Prints logs to stderr for faster debugging + /// See official [wiki](https://github.com/facebook/rocksdb/wiki/Logger) for more information. + pub fn set_stderr_logger(&mut self, log_level: LogLevel, prefix: impl CStrLike) { + let p = prefix.into_c_string().unwrap(); + + unsafe { + let logger = ffi::rocksdb_logger_create_stderr_logger(log_level as c_int, p.as_ptr()); + ffi::rocksdb_options_set_info_log(self.inner, logger); + } + } + /// Sets the threshold at which all writes will be slowed down to at least delayed_write_rate if estimated /// bytes needed to be compaction exceed this threshold. /// diff --git a/tests/test_db.rs b/tests/test_db.rs index 0ab41ad..d2eeebc 100644 --- a/tests/test_db.rs +++ b/tests/test_db.rs @@ -1601,3 +1601,27 @@ fn ratelimiter_with_mode_test() { db.wait_for_compact(&wait_for_compact_opts).unwrap() } } + +#[test] +fn set_stderr_logger_test() { + let path = DBPath::new("_rust_rocksdb_set_stderr_logger_test"); + let mut opts = Options::default(); + opts.create_if_missing(true); + opts.create_missing_column_families(true); + opts.set_stderr_logger(rust_rocksdb::LogLevel::Info, "test db"); + + let cfs = vec!["cf1"]; + let db = DB::open_cf(&opts, &path, cfs).unwrap(); + let cf1 = db.cf_handle("cf1").unwrap(); + db.put_cf(&cf1, b"k1", b"v1").unwrap(); + db.put_cf(&cf1, b"k2", b"v2").unwrap(); + db.put_cf(&cf1, b"k3", b"v3").unwrap(); + db.put_cf(&cf1, b"k4", b"v4").unwrap(); + db.put_cf(&cf1, b"k5", b"v5").unwrap(); + + db.put(b"k1", b"v1").unwrap(); + db.put(b"k2", b"v2").unwrap(); + db.put(b"k3", b"v3").unwrap(); + db.put(b"k4", b"v4").unwrap(); + db.put(b"k5", b"v5").unwrap(); +}