-
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
committed
Jan 12, 2025
1 parent
c7a3908
commit 6684289
Showing
1 changed file
with
84 additions
and
171 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,195 +1,108 @@ | ||
/* <!-- START LICENSE --> | ||
import 'dart:async'; | ||
|
||
import 'package:general_lib/dart/dart.dart'; | ||
import 'package:general_lib/dart/executable_type/executable.dart'; | ||
import 'package:general_lib/extension/extension.dart'; | ||
import 'package:stack_trace/stack_trace.dart'; | ||
|
||
This Software / Program / Source Code Created By Developer From Company GLOBAL CORPORATION | ||
Social Media: | ||
/// GeneralLibraryLog | ||
enum GeneralLibraryLogMessageType { | ||
/// GeneralLibraryLog | ||
error, | ||
|
||
- Youtube: https://youtube.com/@Global_Corporation | ||
- Github: https://github.com/globalcorporation | ||
- TELEGRAM: https://t.me/GLOBAL_CORP_ORG_BOT | ||
/// GeneralLibraryLog | ||
info, | ||
|
||
All code script in here created 100% original without copy / steal from other code if we copy we add description source at from top code | ||
/// GeneralLibraryLog | ||
debug, | ||
|
||
If you wan't edit you must add credit me (don't change) | ||
/// GeneralLibraryLog | ||
succes; | ||
} | ||
|
||
If this Software / Program / Source Code has you | ||
/// GeneralLibraryLog | ||
class GeneralLibraryLogMessage { | ||
/// GeneralLibraryLog | ||
final Object? value; | ||
|
||
Jika Program ini milik anda dari hasil beli jasa developer di (Global Corporation / apapun itu dari turunan itu jika ada kesalahan / bug / ingin update segera lapor ke sub) | ||
/// GeneralLibraryLog | ||
final StackTrace stackTrace; | ||
|
||
Misal anda beli Beli source code di Slebew CORPORATION anda lapor dahulu di slebew jangan lapor di GLOBAL CORPORATION! | ||
/// GeneralLibraryLog | ||
final GeneralLibraryLogMessageType logMessageType; | ||
|
||
Jika ada kendala program ini (Pastikan sebelum deal project tidak ada negosiasi harga) | ||
Karena jika ada negosiasi harga kemungkinan | ||
/// GeneralLibraryLog | ||
final bool isForcePrint; | ||
|
||
1. Software Ada yang di kurangin | ||
2. Informasi tidak lengkap | ||
3. Bantuan Tidak Bisa remote / full time (Ada jeda) | ||
/// GeneralLibraryLog | ||
final bool isFullDetail; | ||
|
||
Sebelum program ini sampai ke pembeli developer kami sudah melakukan testing | ||
/// GeneralLibraryLog | ||
const GeneralLibraryLogMessage({ | ||
/// GeneralLibraryLog | ||
required this.value, | ||
|
||
jadi sebelum nego kami sudah melakukan berbagai konsekuensi jika nego tidak sesuai ? | ||
Bukan maksud kami menipu itu karena harga yang sudah di kalkulasi + bantuan tiba tiba di potong akhirnya bantuan / software kadang tidak lengkap | ||
/// GeneralLibraryLog | ||
required this.isForcePrint, | ||
|
||
/// GeneralLibraryLog | ||
required this.stackTrace, | ||
|
||
<!-- END LICENSE --> */ | ||
// ignore_for_file: unnecessary_string_interpolations, unnecessary_brace_in_string_interps, non_constant_identifier_names | ||
/// GeneralLibraryLog | ||
required this.isFullDetail, | ||
|
||
import 'dart:async'; | ||
import 'dart:convert'; | ||
import 'package:general_lib/dart/dart.dart'; | ||
/// GeneralLibraryLog | ||
required this.logMessageType, | ||
}); | ||
|
||
class Log { | ||
Object? data; | ||
String title; | ||
String name; | ||
Zone? zone; | ||
Object? error; | ||
StackTrace? stackTrace; | ||
DateTime? dateTimeStart; | ||
DateTime? dateTimeNow; | ||
Log( | ||
this.data, { | ||
this.title = "LOG", | ||
this.name = "info", | ||
this.zone, | ||
this.dateTimeNow, | ||
this.dateTimeStart, | ||
this.error, | ||
this.stackTrace, | ||
bool? isPrintToTerminal = true, | ||
GeneralLibraryLogMessage copyWith({ | ||
Object? value, | ||
bool? isForcePrint, | ||
StackTrace? stackTrace, | ||
bool? isFullDetail, | ||
GeneralLibraryLogMessageType? logMessageType, | ||
}) { | ||
dateTimeStart ??= DateTime.now(); | ||
dateTimeNow ??= DateTime.now(); | ||
if (isPrintToTerminal is bool) { | ||
if (isPrintToTerminal) { | ||
printToTerminal(); | ||
} | ||
} else { | ||
// dart | ||
if (Dart.isDebug) { | ||
printToTerminal(); | ||
} | ||
} | ||
} | ||
|
||
String getAllText() { | ||
String msg = "${title}"; | ||
msg += "\n[DATE TIME START]\t${dateTimeStart.toString()}"; | ||
// } | ||
// if (dateTimeNow != null) | ||
msg += "\n[DATE TIME NOW]\t${dateTimeNow.toString()}"; | ||
msg += "\nMessage"; | ||
if (data is Map || data is List) { | ||
msg += "\n${JsonEncoder.withIndent(" " * 2).convert(data)}"; | ||
} else { | ||
msg += "\n${data.toString()}"; | ||
} | ||
// if (stackTrace != null) { | ||
msg += "\n${name.toUpperCase()}"; | ||
|
||
List<String> error_stacks = stackTrace.toString().trim().split("\n"); | ||
for (var i = 0; i < error_stacks.length; i++) { | ||
String error = error_stacks[i]; | ||
msg += "\n[${name}]\t${error}"; | ||
} | ||
// } | ||
|
||
return msg; | ||
return GeneralLibraryLogMessage( | ||
value: value ?? this.value, | ||
isForcePrint: isForcePrint ?? this.isForcePrint, | ||
stackTrace: stackTrace ?? this.stackTrace, | ||
isFullDetail: isFullDetail ?? this.isFullDetail, | ||
logMessageType: logMessageType ?? this.logMessageType, | ||
); | ||
} | ||
} | ||
|
||
String getLongText() { | ||
List<String> msgs = getAllText().split("\n"); | ||
|
||
String text = ""; | ||
|
||
for (var i = 0; i < msgs.length; i++) { | ||
String msg = msgs[i]; | ||
if (msg.length > text.length) { | ||
text = msg.replaceAll(RegExp(r"\t"), " "); | ||
/// GeneralLibraryLog | ||
class GeneralLibraryLog { | ||
/// GeneralLibraryLog | ||
const GeneralLibraryLog(); | ||
|
||
|
||
/// GeneralLibraryLog | ||
static final bool _isCanPrintToTerminal = Dart.executable_type == ExecutableType.cli; | ||
|
||
/// GeneralLibraryLog | ||
FutureOr<void> printToTerminal({ | ||
required GeneralLibraryLogMessage logMessage, | ||
}) async { | ||
if (_isCanPrintToTerminal || logMessage.isForcePrint) { | ||
try { | ||
print(("---" * 5) + logMessage.logMessageType.name + ("---" * 5)); | ||
if (logMessage.isFullDetail) { | ||
print(logMessage.stackTrace.toString()); | ||
} else { | ||
print(Trace.from(logMessage.stackTrace).terse.toString()); | ||
} | ||
if (logMessage.value is Map || logMessage.value is List) { | ||
(logMessage.value ?? {}).printPretty(); | ||
} else { | ||
print(logMessage.value); | ||
} | ||
print("${"---" * 5}Finished${"---" * 5}"); | ||
} catch (e, stack) { | ||
print("$e $stack"); | ||
} | ||
} | ||
|
||
return "${" " * 2}${text}${" " * 2}"; | ||
} | ||
|
||
String line( | ||
{required String text, required String fill, required int longText}) { | ||
final fillCount = longText - text.length; | ||
List<String> left = List.generate(fillCount ~/ 2, (index) => fill); | ||
List<String> right = | ||
List.generate(fillCount - left.length, (index) => fill); | ||
// final left = List.filled(fillCount ~/ 2, fill); | ||
// final right = List.filled(fillCount - left.length, fill); | ||
return left.join() + text + right.join(); | ||
} | ||
|
||
String containerFull({ | ||
required String text, | ||
required int longText, | ||
}) { | ||
return "${containerTop(longText: longText)}\n${containerMid(text: text, longText: longText)}\n${containerEnd(longText: longText)}"; | ||
} | ||
|
||
String containerTop({ | ||
required int longText, | ||
}) { | ||
return "╔${line(text: '', fill: '═', longText: longText)}╗"; | ||
} | ||
|
||
String containerMid({ | ||
required String text, | ||
required int longText, | ||
}) { | ||
return "║${line(text: text, fill: ' ', longText: longText)}║"; | ||
} | ||
|
||
String containerMidClose({ | ||
required int longText, | ||
}) { | ||
// print('╟${line('', '─')}╢'); | ||
return "╟${line(text: "", fill: '─', longText: longText)}╢"; | ||
} | ||
|
||
String containerEnd({ | ||
required int longText, | ||
}) { | ||
return "╚${line(text: "", fill: '═', longText: longText)}╝"; | ||
} | ||
|
||
void printToTerminal() { | ||
print(toString()); | ||
} | ||
|
||
@override | ||
String toString() { | ||
String longText = getLongText(); | ||
|
||
String msg = containerFull(text: title, longText: longText.length); | ||
if (dateTimeStart != null) { | ||
msg += "\n[DATE TIME START]\t${dateTimeStart.toString()}"; | ||
} | ||
if (dateTimeNow != null) { | ||
msg += "\n[DATE TIME NOW]\t${dateTimeNow.toString()}"; | ||
} | ||
|
||
msg += "\n${containerFull(text: "Message", longText: longText.length)}"; | ||
|
||
if (data is Map || data is List) { | ||
msg += "\n${JsonEncoder.withIndent(" " * 2).convert(data)}"; | ||
} else { | ||
msg += "\n${data.toString()}"; | ||
} | ||
if (stackTrace != null) { | ||
msg += | ||
"\n${containerFull(text: name.toUpperCase(), longText: longText.length)}"; | ||
List<String> error_stacks = stackTrace.toString().trim().split("\n"); | ||
for (var i = 0; i < error_stacks.length; i++) { | ||
String error = error_stacks[i]; | ||
msg += "\n[${name}]\t${error}"; | ||
} | ||
} | ||
|
||
msg += "\n${containerFull(text: "Complete", longText: longText.length)}"; | ||
return msg; | ||
} | ||
} |