log method
Implementation
void log(int level, Object? object, String? tag, {bool isJson = false}) {
ansiColorDisabled = false;
if (object == null || object.toString().isEmpty || !Logger.isEnable()) {
return;
}
String message = object.toString();
AnsiPen pen = getAnsiPen(level);
String fileName = LoggerUtil.getFileInfo();
DateTime dateTime = DateTime.now();
String time = LoggerUtil.formatDate(dateTime);
String prefix =
"${getLevelFirst(level)}${Logger.isShowTime ? dateTime : ""} ${Logger.isShowFile ? fileName : ""} : ${tag ?? ""}";
String prefixForPhone = "$time $fileName : ${tag ?? ""}";
if (defaultTargetPlatform == TargetPlatform.iOS) {
// 在ios平台,ide ,ansi颜色识别不了
ansiColorDisabled = true;
}
// 绘制开始时上边的分割线
StringBuffer logMessage = StringBuffer();
print(pen.call("$prefix $_topBorder"));
if (Logger.isShowNavigation) {
print("${pen.call("$prefix $_verticalLine")} ${LoggerUtil.getNavigationFile()} ");
print(pen.call("$prefix $_verticalLine$_singleDivider$_singleDivider"));
}
if (defaultTargetPlatform == TargetPlatform.macOS ||
defaultTargetPlatform == TargetPlatform.windows) {
logMessage.write("$prefixForPhone $_dividerMacOs\n");
} else {
logMessage.write("$prefixForPhone $_topBorder\n");
}
// 处理有换行符的,比如说json
List<String> lines = message.split("\n");
for (String element in lines) {
print(pen.call("$prefix $_verticalLine $element"));
if (defaultTargetPlatform == TargetPlatform.iOS) {
//主要是运行在ios手机上的 日志, 因为运行在ios上会有不等宽的字符,随意加宽一个空格,
logMessage.write("$prefixForPhone $_verticalLineIos $element\n");
} else if (defaultTargetPlatform == TargetPlatform.macOS ||
defaultTargetPlatform == TargetPlatform.windows) {
logMessage.write("$prefixForPhone $_verticalLineMacOs $element\n");
} else {
logMessage.write("$prefixForPhone $_verticalLine $element\n");
}
}
// 绘制结束时下边的分割线
print(pen.call("$prefix $_bottomBorder"));
if (defaultTargetPlatform == TargetPlatform.macOS ||
defaultTargetPlatform == TargetPlatform.windows) {
logMessage.write("$prefixForPhone $_dividerMacOs\n");
} else {
logMessage.write("$prefixForPhone $_bottomBorder");
}
LogMode mode = LogMode(
level: level,
fileName: fileName,
time: time,
logMessage: logMessage.toString(),
);
Logger.notifier.addLog(mode);
}