Refactor logger and minor code polish
This commit is contained in:
70
lib/logger.dart
Normal file
70
lib/logger.dart
Normal file
@@ -0,0 +1,70 @@
|
||||
import 'dart:io';
|
||||
|
||||
// Logger class for writing logs to console and file
|
||||
class Logger {
|
||||
static final Logger _instance = Logger._internal();
|
||||
static Logger get instance => _instance;
|
||||
|
||||
File? _logFile;
|
||||
IOSink? _logSink;
|
||||
|
||||
Logger._internal() {
|
||||
_initLogFile();
|
||||
}
|
||||
|
||||
void _initLogFile() {
|
||||
try {
|
||||
// Use system temp directory
|
||||
final tempDir = Directory.systemTemp;
|
||||
final logFileName = 'rimworld_modman.log';
|
||||
|
||||
_logFile = File('${tempDir.path}${Platform.pathSeparator}$logFileName');
|
||||
_logSink = _logFile!.openWrite(mode: FileMode.writeOnly);
|
||||
|
||||
info('Logging initialized. Log file: ${_logFile!.path}');
|
||||
} catch (e) {
|
||||
print('Failed to initialize log file: $e');
|
||||
}
|
||||
}
|
||||
|
||||
void _log(String message, String level) {
|
||||
final timestamp = DateTime.now().toIso8601String();
|
||||
final formattedMessage = '[$timestamp] [$level] $message';
|
||||
|
||||
// Always print to console
|
||||
print(formattedMessage);
|
||||
|
||||
// Write to file if initialized
|
||||
if (_logSink != null) {
|
||||
try {
|
||||
_logSink!.writeln(formattedMessage);
|
||||
} catch (e) {
|
||||
print('Error writing to log file: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void info(String message) {
|
||||
_log(message, 'INFO');
|
||||
}
|
||||
|
||||
void warning(String message) {
|
||||
_log(message, 'WARN');
|
||||
}
|
||||
|
||||
void error(String message) {
|
||||
_log(message, 'ERROR');
|
||||
}
|
||||
|
||||
void close() {
|
||||
if (_logSink != null) {
|
||||
try {
|
||||
_logSink!.flush();
|
||||
_logSink!.close();
|
||||
} catch (e) {
|
||||
print('Error closing log file: $e');
|
||||
}
|
||||
_logSink = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user