@@ -100,7 +100,7 @@ use std::cell::RefCell;
100
100
use std:: collections:: HashMap ;
101
101
use std:: panic:: PanicHookInfo ;
102
102
use std:: sync:: { Arc , Once } ;
103
- use std:: { backtrace:: Backtrace , env:: VarError , str :: FromStr , sync:: OnceLock , time:: Duration } ;
103
+ use std:: { backtrace:: Backtrace , env:: VarError , sync:: OnceLock , time:: Duration } ;
104
104
105
105
use bridges:: tracing:: LogfireTracingPendingSpanNotSentLayer ;
106
106
use opentelemetry:: trace:: TracerProvider ;
@@ -190,30 +190,39 @@ pub enum ConfigureError {
190
190
Other ( #[ from] Box < dyn std:: error:: Error + Send + Sync > ) ,
191
191
}
192
192
193
- /// Whether to print to the console.
194
- #[ derive( Debug , Clone , Copy , PartialEq , Eq , Hash , Default ) ]
195
- #[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
196
- #[ cfg_attr( feature = "serde" , serde( rename_all = "lowercase" ) ) ]
197
- pub enum ConsoleMode {
198
- /// Write to console if no logfire token
199
- #[ default]
200
- Fallback ,
201
- /// Force write to console
202
- Force ,
203
- }
193
+ #[ expect( deprecated) ]
194
+ mod deprecated {
195
+ use std:: str:: FromStr ;
196
+
197
+ /// Whether to print to the console.
198
+ #[ derive( Debug , Clone , Copy , PartialEq , Eq , Hash , Default ) ]
199
+ #[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
200
+ #[ cfg_attr( feature = "serde" , serde( rename_all = "lowercase" ) ) ]
201
+ #[ deprecated( since = "0.4.0" , note = "use `ConsoleOptions` instead" ) ]
202
+ pub enum ConsoleMode {
203
+ /// Write to console if no logfire token
204
+ #[ default]
205
+ Fallback ,
206
+ /// Force write to console
207
+ Force ,
208
+ }
204
209
205
- impl FromStr for ConsoleMode {
206
- type Err = String ;
210
+ impl FromStr for ConsoleMode {
211
+ type Err = String ;
207
212
208
- fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
209
- match s {
210
- "fallback" => Ok ( ConsoleMode :: Fallback ) ,
211
- "force" => Ok ( ConsoleMode :: Force ) ,
212
- _ => Err ( format ! ( "invalid console mode: {s}" ) ) ,
213
+ fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
214
+ match s {
215
+ "fallback" => Ok ( ConsoleMode :: Fallback ) ,
216
+ "force" => Ok ( ConsoleMode :: Force ) ,
217
+ _ => Err ( format ! ( "invalid console mode: {s}" ) ) ,
218
+ }
213
219
}
214
220
}
215
221
}
216
222
223
+ #[ expect( deprecated) ]
224
+ use deprecated:: ConsoleMode ;
225
+
217
226
/// Main entry point to configure logfire.
218
227
///
219
228
/// This should be called once at the start of the program.
@@ -241,7 +250,9 @@ pub fn configure() -> LogfireConfigBuilder {
241
250
local : false ,
242
251
send_to_logfire : None ,
243
252
token : None ,
244
- console_options : None ,
253
+ console_options : Some ( ConsoleOptions :: default ( ) ) ,
254
+ #[ expect( deprecated) ]
255
+ console_mode : ConsoleMode :: Force ,
245
256
additional_span_processors : Vec :: new ( ) ,
246
257
advanced : None ,
247
258
metrics : None ,
@@ -260,6 +271,10 @@ pub struct LogfireConfigBuilder {
260
271
// service_version: Option<String>,
261
272
// environment: Option<String>,
262
273
console_options : Option < ConsoleOptions > ,
274
+ /// Deprecated setting, `Force` implies use `console_options`, `Fallback` will filter
275
+ /// them out if `send_to_logfire` is false.
276
+ #[ expect( deprecated) ]
277
+ console_mode : ConsoleMode ,
263
278
264
279
// config_dir: Option<PathBuf>,
265
280
// data_dir: Option<Path>,
@@ -323,6 +338,8 @@ impl LogfireConfigBuilder {
323
338
324
339
/// Whether to log to the console.
325
340
#[ must_use]
341
+ #[ deprecated( note = "use `console_options()` instead" ) ]
342
+ #[ expect( deprecated) ]
326
343
pub fn console_mode ( mut self , console_mode : ConsoleMode ) -> Self {
327
344
// FIXME: remove this API and make it match Python, see `console_options()` below
328
345
match console_mode {
@@ -334,10 +351,12 @@ impl LogfireConfigBuilder {
334
351
self
335
352
}
336
353
337
- /// Set the options for logging to console.
338
- #[ cfg( test) ] // FIXME: not all options exposed actually work yet, so not public
339
- pub fn console_options ( mut self , console_options : ConsoleOptions ) -> Self {
340
- self . console_options = Some ( console_options) ;
354
+ /// Sets console options. Set to `None` to disable console logging.
355
+ ///
356
+ /// If not set, will use `ConsoleOptions::default()`.
357
+ #[ must_use]
358
+ pub fn with_console ( mut self , console_options : Option < ConsoleOptions > ) -> Self {
359
+ self . console_options = console_options;
341
360
self
342
361
}
343
362
@@ -495,15 +514,15 @@ impl LogfireConfigBuilder {
495
514
) ;
496
515
}
497
516
498
- // TODO make this behaviour closer to Python
499
- let mut console_options = self . console_options ;
500
- if console_options . is_none ( ) && !send_to_logfire {
501
- // FIXME: in Python the console and logfire settings are independent, we should not have
502
- // "fallback" like this.
503
- console_options = Some ( ConsoleOptions :: default ( ) ) ;
504
- }
505
-
506
- let console_writer = console_options . map ( ConsoleWriter :: new ) . map ( Arc :: new) ;
517
+ let console_writer = self
518
+ . console_options
519
+ // NB deprecated behaviour: if set to fallback and sending to logfire, disable console
520
+ . filter (
521
+ # [ expect ( deprecated ) ]
522
+ |_| ! ( self . console_mode == ConsoleMode :: Fallback && send_to_logfire ) ,
523
+ )
524
+ . map ( ConsoleWriter :: new )
525
+ . map ( Arc :: new) ;
507
526
508
527
if let Some ( console_writer) = console_writer. clone ( ) {
509
528
tracer_provider_builder = tracer_provider_builder. with_span_processor (
0 commit comments