writeLogger static method
写入到日志文件,注意:为避免并发异步写入混乱,目前采用的全部是同步操作
Implementation
static void writeLogger(EasyLogger instance, String msg, EasyLogLevel logLevel) {
if (instance._logFilePath == null) return;
try {
//检测文件是否存在,不存在则创建新的
File? file = _filesMap[instance._logFilePath];
if (file == null) {
file = File('${instance._logFilePath}.log');
_filesMap[instance._logFilePath!] = file;
if (!file.existsSync()) file.createSync(recursive: true); //同步创建
}
//同步写入可避免顺序混乱
file.writeAsStringSync('$msg\n', mode: FileMode.append, flush: true);
//检查当前文件大大小,进行备份
if (file.lengthSync() > instance._logFileMaxBytes) {
//获取目录下的历史备份文件
final fileList = <File>[];
final entityList = file.parent.listSync();
for (var entity in entityList) {
if (entity.path.startsWith(file.path)) {
fileList.add(File(entity.path));
}
}
//根据名称升序排列
fileList.sort((a, b) => a.path.compareTo(b.path));
//移除多余的文件
while (fileList.length > instance._logFileBackup) {
fileList.removeLast().deleteSync();
}
//逆序重命名
for (var i = fileList.length - 1; i >= 0; i--) {
fileList[i].renameSync('${instance._logFilePath}.log.${i + 1}');
}
//从当前缓存文件中移除掉
_filesMap.remove(instance._logFilePath);
}
} catch (error) {
//从当前缓存文件中移除掉
_filesMap.remove(instance._logFilePath);
}
}