71 lines
1.5 KiB
Dart
71 lines
1.5 KiB
Dart
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;
|
|
}
|
|
}
|
|
}
|