13
13
//! #[macro_use] extern crate log;
14
14
//! extern crate android_logger;
15
15
//!
16
- //! use log::Level ;
16
+ //! use log::LevelFilter ;
17
17
//! use android_logger::Config;
18
18
//!
19
19
//! /// Android code may not have obvious "main", this is just an example.
20
20
//! fn main() {
21
21
//! android_logger::init_once(
22
- //! Config::default().with_min_level(Level ::Trace),
22
+ //! Config::default().with_max_level(LevelFilter ::Trace),
23
23
//! );
24
24
//!
25
25
//! debug!("this is a debug {}", "message");
36
36
//! #[macro_use] extern crate log;
37
37
//! extern crate android_logger;
38
38
//!
39
- //! use log::Level ;
39
+ //! use log::LevelFilter ;
40
40
//! use android_logger::{Config,FilterBuilder};
41
41
//!
42
42
//! fn main() {
43
43
//! android_logger::init_once(
44
44
//! Config::default()
45
- //! .with_min_level(Level ::Trace)
45
+ //! .with_max_level(LevelFilter ::Trace)
46
46
//! .with_tag("mytag")
47
47
//! .with_filter(FilterBuilder::new().parse("debug,hello::crate=trace").build()),
48
48
//! );
58
58
//!
59
59
//! android_logger::init_once(
60
60
//! Config::default()
61
- //! .with_min_level (log::Level ::Trace)
61
+ //! .with_max_level (log::LevelFilter ::Trace)
62
62
//! .format(|f, record| write!(f, "my_app: {}", record.args()))
63
63
//! )
64
64
//! ```
@@ -72,7 +72,7 @@ extern crate log;
72
72
73
73
extern crate env_logger;
74
74
75
- use log:: { Level , Log , Metadata , Record } ;
75
+ use log:: { Level , LevelFilter , Log , Metadata , Record } ;
76
76
#[ cfg( target_os = "android" ) ]
77
77
use log_ffi:: LogPriority ;
78
78
use std:: ffi:: { CStr , CString } ;
@@ -137,7 +137,7 @@ impl Log for AndroidLogger {
137
137
fn enabled ( & self , metadata : & Metadata ) -> bool {
138
138
let config = self . config ( ) ;
139
139
// todo: consider __android_log_is_loggable.
140
- Some ( metadata. level ( ) ) > = config. log_level
140
+ metadata. level ( ) < = config. log_level . unwrap_or_else ( log :: max_level )
141
141
}
142
142
143
143
fn log ( & self , record : & Record ) {
@@ -214,18 +214,29 @@ impl AndroidLogger {
214
214
/// Filter for android logger.
215
215
#[ derive( Default ) ]
216
216
pub struct Config {
217
- log_level : Option < Level > ,
217
+ log_level : Option < LevelFilter > ,
218
218
filter : Option < env_logger:: filter:: Filter > ,
219
219
tag : Option < CString > ,
220
220
custom_format : Option < FormatFn > ,
221
221
}
222
222
223
223
impl Config {
224
- /// Change the minimum log level.
224
+ // TODO: Remove on 0.13 version release.
225
+ /// **DEPRECATED**, use [`Config::with_max_level()`] instead.
226
+ #[ deprecated( note = "use `.with_max_level()` instead" ) ]
227
+ pub fn with_min_level ( self , level : Level ) -> Self {
228
+ self . with_max_level ( level. to_level_filter ( ) )
229
+ }
230
+
231
+ /// Changes the maximum log level.
232
+ ///
233
+ /// Note, that `Trace` is the maximum level, because it provides the
234
+ /// maximum amount of detail in the emitted logs.
225
235
///
226
- /// All values above the set level are logged. For example, if
227
- /// `Warn` is set, the `Error` is logged too, but `Info` isn't.
228
- pub fn with_min_level ( mut self , level : Level ) -> Self {
236
+ /// If `Off` level is provided, then nothing is logged at all.
237
+ ///
238
+ /// [`log::max_level()`] is considered as the default level.
239
+ pub fn with_max_level ( mut self , level : LevelFilter ) -> Self {
229
240
self . log_level = Some ( level) ;
230
241
self
231
242
}
@@ -253,7 +264,7 @@ impl Config {
253
264
/// # use android_logger::Config;
254
265
/// android_logger::init_once(
255
266
/// Config::default()
256
- /// .with_min_level (log::Level ::Trace)
267
+ /// .with_max_level (log::LevelFilter ::Trace)
257
268
/// .format(|f, record| write!(f, "my_app: {}", record.args()))
258
269
/// )
259
270
/// ```
@@ -449,7 +460,7 @@ pub fn init_once(config: Config) {
449
460
if let Err ( err) = log:: set_logger ( logger) {
450
461
debug ! ( "android_logger: log::set_logger failed: {}" , err) ;
451
462
} else if let Some ( level) = log_level {
452
- log:: set_max_level ( level. to_level_filter ( ) ) ;
463
+ log:: set_max_level ( level) ;
453
464
}
454
465
}
455
466
@@ -469,18 +480,18 @@ mod tests {
469
480
fn check_config_values ( ) {
470
481
// Filter is checked in config_filter_match below.
471
482
let config = Config :: default ( )
472
- . with_min_level ( Level :: Trace )
483
+ . with_max_level ( LevelFilter :: Trace )
473
484
. with_tag ( "my_app" ) ;
474
485
475
- assert_eq ! ( config. log_level, Some ( Level :: Trace ) ) ;
486
+ assert_eq ! ( config. log_level, Some ( LevelFilter :: Trace ) ) ;
476
487
assert_eq ! ( config. tag, Some ( CString :: new( "my_app" ) . unwrap( ) ) ) ;
477
488
}
478
489
479
490
#[ test]
480
491
fn log_calls_formatter ( ) {
481
492
static FORMAT_FN_WAS_CALLED : AtomicBool = AtomicBool :: new ( false ) ;
482
493
let config = Config :: default ( )
483
- . with_min_level ( Level :: Info )
494
+ . with_max_level ( LevelFilter :: Info )
484
495
. format ( |_, _| {
485
496
FORMAT_FN_WAS_CALLED . store ( true , Ordering :: SeqCst ) ;
486
497
Ok ( ( ) )
@@ -493,10 +504,12 @@ mod tests {
493
504
}
494
505
495
506
#[ test]
496
- fn logger_always_enabled ( ) {
497
- let logger = AndroidLogger :: new ( Config :: default ( ) ) ;
507
+ fn logger_enabled_threshold ( ) {
508
+ let logger = AndroidLogger :: new ( Config :: default ( ) . with_max_level ( LevelFilter :: Info ) ) ;
498
509
499
- assert ! ( logger. enabled( & log:: MetadataBuilder :: new( ) . build( ) ) ) ;
510
+ assert ! ( logger. enabled( & log:: MetadataBuilder :: new( ) . level( Level :: Warn ) . build( ) ) ) ;
511
+ assert ! ( logger. enabled( & log:: MetadataBuilder :: new( ) . level( Level :: Info ) . build( ) ) ) ;
512
+ assert ! ( !logger. enabled( & log:: MetadataBuilder :: new( ) . level( Level :: Debug ) . build( ) ) ) ;
500
513
}
501
514
502
515
// Test whether the filter gets called correctly. Not meant to be exhaustive for all filter
0 commit comments