|
4 | 4 | //! are written to `stderr` by default, which should appear in the logs for most LSP clients. A
|
5 | 5 | //! `logFile` path can also be specified in the settings, and output will be directed there
|
6 | 6 | //! instead.
|
7 |
| -use core::str; |
| 7 | +use std::path::{Path, PathBuf}; |
| 8 | +use std::str::FromStr; |
| 9 | +use std::sync::Arc; |
| 10 | + |
8 | 11 | use serde::Deserialize;
|
9 |
| -use std::{path::PathBuf, str::FromStr, sync::Arc}; |
10 | 12 | use tracing::level_filters::LevelFilter;
|
11 |
| -use tracing_subscriber::{ |
12 |
| - Layer, |
13 |
| - fmt::{time::Uptime, writer::BoxMakeWriter}, |
14 |
| - layer::SubscriberExt, |
15 |
| -}; |
| 13 | +use tracing_subscriber::Layer; |
| 14 | +use tracing_subscriber::fmt::time::ChronoLocal; |
| 15 | +use tracing_subscriber::fmt::writer::BoxMakeWriter; |
| 16 | +use tracing_subscriber::layer::SubscriberExt; |
16 | 17 |
|
17 |
| -pub(crate) fn init_logging(log_level: LogLevel, log_file: Option<&std::path::Path>) { |
| 18 | +pub(crate) fn init_logging(log_level: LogLevel, log_file: Option<&Path>) { |
18 | 19 | let log_file = log_file
|
19 | 20 | .map(|path| {
|
20 | 21 | // this expands `logFile` so that tildes and environment variables
|
@@ -49,10 +50,11 @@ pub(crate) fn init_logging(log_level: LogLevel, log_file: Option<&std::path::Pat
|
49 | 50 | Some(file) => BoxMakeWriter::new(Arc::new(file)),
|
50 | 51 | None => BoxMakeWriter::new(std::io::stderr),
|
51 | 52 | };
|
| 53 | + let is_trace_level = log_level == LogLevel::Trace; |
52 | 54 | let subscriber = tracing_subscriber::Registry::default().with(
|
53 | 55 | tracing_subscriber::fmt::layer()
|
54 |
| - .with_timer(Uptime::default()) |
55 |
| - .with_thread_names(true) |
| 56 | + .with_timer(ChronoLocal::new("%Y-%m-%d %H:%M:%S.%f".to_string())) |
| 57 | + .with_thread_names(is_trace_level) |
56 | 58 | .with_ansi(false)
|
57 | 59 | .with_writer(logger)
|
58 | 60 | .with_filter(LogLevelFilter { filter: log_level }),
|
@@ -108,7 +110,7 @@ impl<S> tracing_subscriber::layer::Filter<S> for LogLevelFilter {
|
108 | 110 | meta.level() <= &filter
|
109 | 111 | }
|
110 | 112 |
|
111 |
| - fn max_level_hint(&self) -> Option<tracing::level_filters::LevelFilter> { |
| 113 | + fn max_level_hint(&self) -> Option<LevelFilter> { |
112 | 114 | Some(LevelFilter::from_level(self.filter.trace_level()))
|
113 | 115 | }
|
114 | 116 | }
|
0 commit comments