Skip to content

Commit c8386a3

Browse files
committed
f improve docs & remove cleanups from rotate()
1 parent e982113 commit c8386a3

3 files changed

Lines changed: 32 additions & 16 deletions

File tree

contrib/ldk-server-config.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ dir_path = "/tmp/ldk-server/" # Path for LDK and BDK data persis
1515
[log]
1616
level = "Debug" # Log level (Error, Warn, Info, Debug, Trace)
1717
#file = "/tmp/ldk-server/ldk-server.log" # Log file path
18-
# Enabling `log_to_file` automatically rotate logs at `max_size_mb` or `rotation_interval_hours`.
18+
# Enabling `log_to_file` automatically rotates logs at `max_size_mb` or `rotation_interval_hours`.
1919
# To disable the internal rotation and keep logging to file, set `max_size_mb` # and `rotation_interval_hours` params to `0`.
2020
log_to_file = true # Enable logging to a file (default: true, also logs to both stdout and stderr)
2121
#max_size_mb = 50 # Max size of log file before rotation (default: 50MB)

ldk-server/src/util/config.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,8 @@ impl ConfigBuilder {
278278
self.log_max_files = Some(log_max_files);
279279
}
280280

281-
if let Some(log_file_path) = args.log_to_file {
282-
self.log_to_file = Some(log_file_path);
281+
if let Some(log_to_file) = args.log_to_file {
282+
self.log_to_file = Some(log_to_file);
283283
}
284284
}
285285

ldk-server/src/util/logger.rs

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use std::path::{Path, PathBuf};
1313
use std::sync::{Arc, Mutex};
1414
use std::time::SystemTime;
1515

16-
use log::{Level, LevelFilter, Log, Metadata, Record};
16+
use log::{error, Level, LevelFilter, Log, Metadata, Record};
1717

1818
struct LoggerState {
1919
file: LineWriter<File>,
@@ -35,7 +35,7 @@ struct LoggerState {
3535
///
3636
/// Example: `[2025-12-04T10:30:45Z INFO ldk_server:42] Starting up...`
3737
///
38-
/// The logger does a native size/time-based rotation and retains the last 5 logs by default, if `max_rotated_files` is unset.
38+
/// The logger does a native size/time-based rotation and retains the last 5 logs by default, if `log_max_files` is unset.
3939
pub struct ServerLogger {
4040
/// The maximum log level to display
4141
level: LevelFilter,
@@ -127,9 +127,15 @@ impl ServerLogger {
127127

128128
/// Flushes the current file, renames it with a timestamp, opens a fresh log,
129129
/// and synchronously deletes older log files.
130-
fn rotate(&self, state: &mut LoggerState) -> Result<(), io::Error> {
130+
fn rotate(
131+
&self, state: &mut LoggerState, system_time_now: SystemTime,
132+
) -> Result<(), io::Error> {
131133
state.file.flush()?;
132-
let log_file_path = self.log_file_path.as_ref().unwrap();
134+
let log_file_path = if let Some(path) = self.log_file_path.as_ref() {
135+
path
136+
} else {
137+
return Ok(());
138+
};
133139

134140
let now = chrono::Utc::now().format("%Y-%m-%dT%H-%M-%SZ").to_string();
135141
let mut new_path = log_file_path.to_path_buf().into_os_string();
@@ -144,12 +150,7 @@ impl ServerLogger {
144150

145151
// Reset our rotation triggers for the new file
146152
state.bytes_written = 0;
147-
state.created_at = SystemTime::now();
148-
149-
// Clean up old log files
150-
if let Err(e) = cleanup_old_logs(log_file_path, state.log_max_files) {
151-
eprintln!("Failed to clean up old log files: {}", e);
152-
}
153+
state.created_at = system_time_now;
153154

154155
Ok(())
155156
}
@@ -185,6 +186,8 @@ impl Log for ServerLogger {
185186
},
186187
};
187188

189+
let mut cleanup_max_files = None;
190+
188191
if let Some(state_mutex) = &self.state {
189192
// Log to file
190193
let log_bytes = log_line.len() + 1;
@@ -205,15 +208,26 @@ impl Log for ServerLogger {
205208
}
206209

207210
if needs_rotation {
208-
if let Err(e) = self.rotate(&mut state) {
209-
eprintln!("Failed to rotate log file: {}", e);
211+
if let Err(e) = self.rotate(&mut state, now) {
212+
error!("Failed to rotate log file: {e}");
213+
} else {
214+
cleanup_max_files = Some(state.log_max_files);
210215
}
211216
}
212217

213218
let _ = writeln!(state.file, "{}", log_line);
214219
state.bytes_written += log_bytes;
215220
}
216221
}
222+
223+
// Clean up old log files
224+
if let (Some(log_max_files), Some(log_file_path)) =
225+
(cleanup_max_files, &self.log_file_path)
226+
{
227+
if let Err(e) = cleanup_old_logs(log_file_path, log_max_files) {
228+
error!("Failed to clean up old log files: {e}");
229+
}
230+
}
217231
}
218232
}
219233

@@ -276,7 +290,9 @@ fn cleanup_old_logs(log_file_path: &Path, max_files: usize) -> io::Result<()> {
276290
.collect();
277291

278292
// Sort by modification time (oldest first)
279-
entries.sort_by_key(|e| e.metadata().and_then(|m| m.modified()).unwrap_or(SystemTime::now()));
293+
entries.sort_by_cached_key(|e| {
294+
e.metadata().and_then(|m| m.modified()).unwrap_or(SystemTime::now())
295+
});
280296

281297
if entries.len() > max_files {
282298
for entry in entries.iter().take(entries.len() - max_files) {

0 commit comments

Comments
 (0)