Skip to content

Commit a438c6e

Browse files
authored
Merge pull request #664 from tisonkun/logger-field
Add an optional logger param
2 parents d777bd6 + 088f9f3 commit a438c6e

File tree

5 files changed

+257
-68
lines changed

5 files changed

+257
-68
lines changed

src/__private_api.rs

+38-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! WARNING: this is not part of the crate's public API and is subject to change at any time
22
33
use self::sealed::KVs;
4-
use crate::{Level, Metadata, Record};
4+
use crate::{logger, Level, Log, Metadata, Record};
55
use std::fmt::Arguments;
66
use std::panic::Location;
77
pub use std::{format_args, module_path, stringify};
@@ -34,7 +34,30 @@ impl<'a> KVs<'a> for () {
3434

3535
// Log implementation.
3636

37-
fn log_impl(
37+
/// The global logger proxy.
38+
///
39+
/// This zero-sized type implements the [`Log`] trait by forwarding calls
40+
/// to the logger registered with the `set_boxed_logger` or `set_logger`
41+
/// methods if there is one, or a nop logger as default.
42+
#[derive(Copy, Clone, Default, Debug)]
43+
pub struct GlobalLogger;
44+
45+
impl Log for GlobalLogger {
46+
fn enabled(&self, metadata: &Metadata) -> bool {
47+
logger().enabled(metadata)
48+
}
49+
50+
fn log(&self, record: &Record) {
51+
logger().log(record)
52+
}
53+
54+
fn flush(&self) {
55+
logger().flush()
56+
}
57+
}
58+
59+
fn log_impl<L: Log>(
60+
logger: L,
3861
args: Arguments,
3962
level: Level,
4063
&(target, module_path, loc): &(&str, &'static str, &'static Location),
@@ -58,22 +81,30 @@ fn log_impl(
5881
#[cfg(feature = "kv")]
5982
builder.key_values(&kvs);
6083

61-
crate::logger().log(&builder.build());
84+
logger.log(&builder.build());
6285
}
6386

64-
pub fn log<'a, K>(
87+
pub fn log<'a, K, L>(
88+
logger: &L,
6589
args: Arguments,
6690
level: Level,
6791
target_module_path_and_loc: &(&str, &'static str, &'static Location),
6892
kvs: K,
6993
) where
7094
K: KVs<'a>,
95+
L: Log,
7196
{
72-
log_impl(args, level, target_module_path_and_loc, kvs.into_kvs())
97+
log_impl(
98+
logger,
99+
args,
100+
level,
101+
target_module_path_and_loc,
102+
kvs.into_kvs(),
103+
)
73104
}
74105

75-
pub fn enabled(level: Level, target: &str) -> bool {
76-
crate::logger().enabled(&Metadata::builder().level(level).target(target).build())
106+
pub fn enabled<L: Log>(logger: L, level: Level, target: &str) -> bool {
107+
logger.enabled(&Metadata::builder().level(level).target(target).build())
77108
}
78109

79110
#[track_caller]

src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1204,7 +1204,7 @@ pub trait Log: Sync + Send {
12041204
fn flush(&self);
12051205
}
12061206

1207-
// Just used as a dummy initial value for LOGGER
1207+
/// A dummy initial value for LOGGER.
12081208
struct NopLogger;
12091209

12101210
impl Log for NopLogger {

0 commit comments

Comments
 (0)