zubairehman / flogs Goto Github PK
View Code? Open in Web Editor NEWAn Advanced Logging Framework develop in flutter that provides quick & simple logging solution.
License: MIT License
An Advanced Logging Framework develop in flutter that provides quick & simple logging solution.
License: MIT License
FLog.clearLogs() does not delete data from database. When I call clearLogs(), close my app, open it again and call FLog.printLogs() I see all my logs again.
With the code below I expect all logs to be deleted - that is all logs will have a timestamp less than this moment. But it doesn't delete anything. If I look at the data I see the all entries still there with an earlier timestamp.
FLog.deleteAllLogsByFilter( filters: [ Filter.lessThan(DBConstants.FIELD_TIMESTAMP, DateTime.now()), ], );
clearLogs() works as expected.
FormatException (FormatException: Unexpected character (at character 372)
...LogLevel.INFO","stacktrace":"null"}}{"key":6319,"store":"flogs","value":...
^
)
_ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1404)
_ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:869)
_parseJson (dart:convert-patch/convert_patch.dart:40)
JsonDecoder.convert (dart:convert/json.dart:506)
JsonCodec.decode (dart:convert/json.dart:157)
SembastDatabase.decodeRecordLineString (\Users\silver\.pub-cache\hosted\pub.dartlang.org\sembast-3.0.2\lib\src\database_impl.dart:220)
SembastDatabase.open.<anonymous closure>.import (\Users\silver\.pub-cache\hosted\pub.dartlang.org\sembast-3.0.2\lib\src\database_impl.dart:793)
<asynchronous gap> (Unknown Source:0)
SembastDatabase.open.<anonymous closure> (\Users\silver\.pub-cache\hosted\pub.dartlang.org\sembast-3.0.2\lib\src\database_impl.dart:842)
<asynchronous gap> (Unknown Source:0)
BasicLock.synchronized (\Users\silver\.pub-cache\hosted\pub.dartlang.org\synchronized-3.0.0\lib\src\basic_lock.dart:33)
<asynchronous gap> (Unknown Source:0)
SembastDatabase.open (\Users\silver\.pub-cache\hosted\pub.dartlang.org\sembast-3.0.2\lib\src\database_impl.dart:638)
<asynchronous gap> (Unknown Source:0)
DatabaseOpenHelper.openDatabase.<anonymous closure> (\Users\silver\.pub-cache\hosted\pub.dartlang.org\sembast-3.0.2\lib\src\database_factory_mixin.dart:86)
<asynchronous gap> (Unknown Source:0)
BasicLock.synchronized (\Users\silver\.pub-cache\hosted\pub.dartlang.org\synchronized-3.0.0\lib\src\basic_lock.dart:33)
<asynchronous gap> (Unknown Source:0)
AppDatabase._openDatabase (\Users\silver\.pub-cache\git\Flogs-edec750a0149d54aecec608a12556066211da9fd\lib\data\local\app_database.dart:59)
<asynchronous gap> (Unknown Source:0)
Does the actual log writing happen in the background?
Is there any way to force dump the logs so they are available for query?
When I run FLog.exportLogs
method it gives following error.
File file = await FLog.exportLogs();
Unhandled Exception: type 'Future<List<RecordSnapshot<int, Map<String, Object?>>>>' is not a subtype of type 'FutureOr<List<RecordSnapshot<int, Map<String, Object>>>>' in type cast
#0 FlogDao.getAllLogs
package:f_logs/…/local/flog_dao.dart:100
<asynchronous suspension>
#1 FLog._getAllLogs
package:f_logs/…/flog/flog.dart:433
<asynchronous suspension>
#2 FLog.exportLogs
package:f_logs/…/flog/flog.dart:262
<asynchronous suspension>
I am using latest null safety version 2.0.0
dart compiler points to following in flog_dao.dart file.
Future<List<Log>> getAllLogs() async { final recordSnapshots = await (_flogsStore.find( await _db, ) as FutureOr<List<RecordSnapshot<int, Map<String, Object>>>>);
Error: Because f_logs >=1.2.2 depends on permission_handler ^4.0.0 and depends on permission_handler ^5.0.0+hotfix.6, f_logs >=1.2.2 is forbidden.
I would like to use permission_handler for other services, but not able to use it as log uses older version.
My pubspec.xml
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
cupertino_icons: ^0.1.2
sqflite: ^1.3.0+1
path_provider: ^1.6.7
permission_handler: ^5.0.0+hotfix.6
contacts_service: ^0.4.6
dev_dependencies:
flutter_test:
sdk: flutter
test: ^1.14.3
f_logs: 1.3.0-alpha-01
mockito: ^4.1.1
Since the Flog logging calls are async methods, do you recommend using await for the calls (to prevent possibly logging out-of-sequence), or is it ok to skip the await?
E.g.
await FLog.info(text: '1234');
await FLog.info(text: '5678');
or is this ok:
FLog.info(text: '1234');
FLog.info(text: '5678'); // will this always be logged after 1234 above?
Thanks.
I need to add a log with a custom timestamp because I need to write a log from native (Plugin) to FLogs while the application is running.
But if I use MethodChannel to call the function from native to flutter. The timestamp would be incorrect so my log is difficult to read.
So I think if I get the timestamp from native and send it to Flutter. That can help resolve my issue.
Thanks,
I'm not quite sure why there is no empty fields in exported logs. For instance, if you don't specify exception / stacktrace it returns empty string. This is bad, since you don't know which part of the logs you are missing. This is required if you want to parse logs on other system, fe. google Stackdriver.
static String _formatCurly(Log log, bool isDevelopmentDebuggingEnabled) {
String output;
if (log != null) {
output = "{${log.className}} ";
output += "{${log.methodName}} ";
output += "{${log.text}} ";
output += log.exception != 'null' ? "{${log.exception}} " : "";
output += "{${log.logLevel.toString()}} ";
output += "{${log.timestamp}} ";
output += log.stacktrace != 'null' ? "{${log.stacktrace}} " : "";
if (isDevelopmentDebuggingEnabled) {
output += !kReleaseMode ? "{${log.dataLogType}} " : "";
output += !kReleaseMode ? "{${log.timeInMillis}}" : "";
}
}
return output;
}
IMO it should return empty {}
so we can easily split each row and parse it more easily.
This could be easily configured via cfg file to keep backward compatibility.
PR for this created: #21
@zubairehman
Is this project dead? Because I see a lot of PR or Issues which is nobody resolving for last half year..
If I build an app with --obfuscate
and --split-debug-info
and try to log a crash automatically, an error is thrown at this line:
Flogs/lib/model/flog/flog.dart
Line 404 in 86bb3e9
Probably because when the Stacktrace is obfuscated it is different from the normal one.
I have noticed during my testing of the library that if I do an action in the app that generates a bunch of logs and then try to export them immediately after that, the export does not always contain all of the generated logs. It seems there may be a buffer of some sort that is still getting processed because if I wait a little longer, they eventually show up in the export if I try again. My questions are:
Thanks!
I got the error when call FLog.getAllLogsByFilter(...)
Unhandled Exception: type 'Future<List<RecordSnapshot<int, Map<String, Object?>>>>' is not a subtype of type 'FutureOr<List<RecordSnapshot<int, Map<String, Object>>>>' in type cast
#0 FlogDao.getAllSortedByFilter
package:f_logs/…/local/flog_dao.dart:85
#1 FLog.getAllLogsByFilter
package:f_logs/…/flog/flog.dart:300
Hi,
Getting this error when trying to run example app on android:
AndroidManifest.xml:22:18-91 Error:
Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.0.2] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:13:5-36:19 to override.
Hi Thanks for this great library, it;s looking good I am thinking about using it.
I have a question regarding iOS permissions.
When do we need to ask for the permission to photo gallery? Is it just for the export file feature?
The App I am currently working on does not access photo gallery.
If I ask for the following permissions they will be rejected by the user. Does this mean flogs won't work?
NSPhotoLibraryAddUsageDescription
FLogs would like to save photos from the app to your gallery
NSPhotoLibraryUsageDescription
FLogs would like to access your photo gallery for uploading images to the app
Isn't there any alternative ways to save the logs? For example, can the logs be saved to applications instillation directory without asking for permissions and then access them from there?
My primary goal is to A: Generate logs, B: when user opens the app again send errors to API.
I have installed this, and not even set it up yet, and Apple rejected it from TestFlight for a series of concerning permissions that are not even included as part of the documentation.
Why would the logging app need access too:
NSContactsUsageDescription
NSCalendarsUsageDescription
NSAppleMusicUsageDescription
NSMotionUsageDescription
NSSpeechRecognitionUsageDescription
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
That is a long list of very invasive and seemingly unnecessary permissions that are required in order to even get the app accepted by TestFlight, Music, Real-time location.
I use flutter WorkManager to trigger background task.
However, Flogs not work anymore.
Future _openDatabase() async {
// Get a platform-specific directory where persistent app data can be stored
final appDocumentDir = await getApplicationDocumentsDirectory();
// Path with the form: /platform-specific-directory/demo.db
final dbPath = join(appDocumentDir.path, DBConstants.DB_NAME);
// Check to see if encryption is set, then provide codec
// else init normal db with path
var database;
if (FLog.getDefaultConfigurations().encryptionEnabled &&
FLog.getDefaultConfigurations().encryptionKey.isNotEmpty) {
// Initialize the encryption codec with a user password
var codec = getXXTeaSembastCodec(
password: FLog.getDefaultConfigurations().encryptionKey);
database = await databaseFactoryIo.openDatabase(dbPath, codec: codec);
} else {
database = await databaseFactoryIo.openDatabase(dbPath); // <====== not return in the background
}
// Any code awaiting the Completer's future will now start executing
_dbOpenCompleter!.complete(database);
}
In dart/flutter environment unhandled 'exceptions' may be inherited of two different base classes Error and Exception. In case we call FLog.error(...) method in a unhandled error/exception callback where both 'Error' and 'Exception' can arrive, then in case Error comes, call of Flog.error(..) trows error by itself since Error and Exception are incompatible types.
Please change type of 'exception:' parameter to dynamic as it is done in variety of Crashlitics tools may be used with Flutter.
I updated the flutter and the f_logs stopped working because of the dependencies
Thanks for the package. I'm just starting to use it, and what makes me confused is the import part from the readme.
How would I know which dart file should I import if I just want to log?
I think only importing one file is a better way and less difficult to use this package.
I just install f_logs: 1.2.0 version from dart packages and i couldn't find deleteAllLogsByFilter method so which release do i need to use
The problem is that the flutter tests are done while the _writeLogs(Log log)
method waits for await _flogDao.insert(log);
. Therefore, the part where the logs are printed to the console is not called anymore. [flog.dart]
if (_config.isDebuggable) {
print(Formatter.format(log, _config));
}
To fix the problem, print
has to be called before await _flogDao.insert(log);
I just want to keep log files for the latest 7 days, all the log beyond that time will be automatically deleted
Has it been supported, and how to config it?
Hi!
i am trying to call a method getAllSortedByFilter() and get this error
It looks like something went wrong when migrating to null safety
type 'Future<List<RecordSnapshot<int, Map<String, Object?>>>>' is not a subtype of type 'FutureOr<List<RecordSnapshot<int, Map<String, Object>>>>' in type cast
#0 FlogDao.getAllSortedByFilter (package:f_logs/data/local/flog_dao.dart:85:7)
<asynchronous suspension>
#1 FLog.getAllLogsByFilter (package:f_logs/model/flog/flog.dart:300:14)
<asynchronous suspension>
The current flogs.db file is over 600k lines and 250mb. It is not possible to export any logs as it results in app termination for using too much memory. Also it is not possible to clear the logs as it also results in app termination.
Flutter (Channel stable, 2.2.3, on macOS 11.3 20E232 darwin-arm, locale en-GB)
iOS 14.7.1
Hey there,
Thanks for the really interesting package that is really easy to use. However, I wonder why would we need public folder permission to export the log file, since it is also possible to extract it in the in-app directory and handle it internally to share/print/etc.... Google, especially has/will become very strict to apps that require this specific permissions.
Any clarification is really helpful.
Hi,
I'm getting this error when trying to run the example app after adding flutter_localizations in pubspec.yaml:
Because no versions of f_logs match >1.2.1 <2.0.0 and f_logs 1.2.1 depends on intl ^0.15.8, f_logs ^1.2.1 requires intl ^0.15.8.
And because every version of flutter_localizations from sdk depends on intl 0.16.0, f_logs ^1.2.1 is incompatible with flutter_localizations from sdk.
So, because flutter_log depends on both flutter_localizations any from sdk and f_logs ^1.2.1, version solving failed.
pub get failed (1; So, because flutter_log depends on both flutter_localizations any from sdk and f_logs ^1.2.1, version solving failed.)
I haven't tried the plugin yet, but I was wondering if there would be an issue with having already a local db in the app (currently using the sqflite package)
Could you migrate your package to Null-safety?
f_logs has some widget to render the log in the application interface similar to linux tail -f tool
I'm developing a server backup tool with desktop flutter, where I copy the files via SFTP and I need to record the logs and display them in the app interface, I would like to display the logs in the interface similar to tail -f
I'm unit testing a service that relies on FLog.
My service's method contains a logging statement, FLog.info(text: 'message');
that results in the following error:
MissingPluginException(No implementation found for method getApplicationDocumentsDirectory on channel plugins.flutter.io/path_provider)
When I change the logging call to FLog.trace(text: 'message');
, it works fine...guessing because it doesn't actually try and write a log entry.
Is there a way around this? Can I mock the FLog method calls? Or, do I need to create my own logging interface that calls FLog internally, and, then mock that interface in my unit tests?
Hey, someone submitted this on Reddit and there was some feedback in the comments that you might find useful:
Hi,
Could you please provide a new version of the package on pub.dev containing the recent fixes?
Thanks!
Hi!
Sometimes I see this exception in Cashlytics:
Non-fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError
FormatException: Unexpected character (at character 344) ...LogLevel.INFO","stacktrace":"null"}}{"key":4723,"store":"flogs","value":... ^ . Error thrown null.
JsonCodec.decode (JsonCodec.java)
SembastDatabase.open.<fn>.import (<fn>.java:797)
SembastDatabase.open.<fn> (open.java:847)
BasicLock.synchronized (BasicLock.java:33)
SembastDatabase.open (SembastDatabase.java:638)
DatabaseOpenHelper.openDatabase.<fn> (openDatabase.java:86)
BasicLock.synchronized (BasicLock.java:33)
AppDatabase._openDatabase (AppDatabase.java:59)
I haven't actually tested this logging framework yet, I just had a quick look at the code before I would start to use the package. It seems in this line, that the LogLevel is not respected.
https://github.com/zubairehman/Flogs/blob/master/lib/model/flog/flog.dart#L324
Please correct me, if I am wrong :)
Creating a DEBUG log does not appear to be working, or at that very least the commands to fetch logs are not grabbing them.
I have tried FLog.debug
as well as FLog.logThis
with a LogLevel of LogLevel.DEBUG
and I am unable to fetch these results with either getAllLogs()
or getAllLogsByFilter()
.
Is this functionality broken or no longer supported?
Thanks!
Hello
On the library description, it says "Logs can easily be exported as zip file base on filter type, the zip file can then be uploaded to server or to use it locally."
I see there is a function to export and this will export to an external storage, so this will save logs in a db and txt file on user's phone. But how to get these logs sent to company's email so that developer can access user's logs? I means if it just saved on user's phone and still can't access, that's not very useful right? but I couldn't find any other resources on how to do it. How to export as a zip file and then upload to server?
This might not be an issue, but I don't know how to do it and if anyone knows, please share with me, thank you!
Hello,
I am trying to use Flogs and was trying to export log entries and send them to a back-end server as JSON. However, the timestamp fields in Flogs comes out as strings, e.g.:
"28 October 2019 01:44:28 PM"
This format cannot be parsed by DateTime, so no easy way to turn it into a DateTime field. Storing a timestamp on the back-end server as a string in the above format is not very useful.
Is there a way to get the the timestamp as a DateTime?
Thanks.
_logThis https://github.com/zubairehman/Flogs/blob/master/lib/model/flog/flog.dart#L397 should check if the Trace.current().frames[2].member
has enough elements after splitting the name.
Hi @zubairehman!
I noticed Flogs code has no releases here on github.com and git tags are not used to keep track of specific points in a Git repository’s history.
For check how it works i added in my feature branch git tag "v2.0.0-alpha-01" and i created a (pre-)release based on this tag.
After creation release looks like example here: https://github.com/slc1973/Flogs/releases
How do you like this idea?
Further develop branch of this project is 43 commits behind master. I think it's better when contributors create pull requests to develop branch and not to master branch (how I did it too :( ). But pre-condition for this is to keep develop branch up to date. I hope I am not saying anything wrong ;) OR delete develop branch if it's not used...
Have a great time!
how to save the log as a simple txt as below in a specific path, example: "c:\fsbackup_log.txt", using flutter desktop windows
I am getting an error when calling any of the log methods (FLog.info, etc.) while in a method that is not directly inside of a class. I can get around this by manually passing in the method, but there seems to be a bug when this library tries to figure out the method name when the method is not directly in a class.
Code:
final logLevelReducer = combineReducers<LogLevel>([
new TypedReducer<LogLevel, SetLogLevelAction>(_setLogLevel),
]);
LogLevel _setLogLevel(LogLevel logLevel, dynamic action) {
final LogLevel _newLogLevel = action.logLevel;
FLog.getDefaultConfigurations()..activeLogLevel = _newLogLevel;
// Error occurs here
FLog.info(text: 'LogLevel set to: ${FLog.getDefaultConfigurations().activeLogLevel}');
return _newLogLevel;
}
Note: This code is in its own file. The logLevelReducer
is used by a different class in another file like so:
AppState appReducer(AppState state, dynamic action) {
return new AppState(
...
logLevel: logLevelReducer(state.logLevel, action),
);
}
Error stacktrace:
E/flutter ( 4823): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: RangeError (index): Invalid value: Only valid value is 0: 1
E/flutter ( 4823): #0 List.[] (dart:core-patch/growable_array.dart:149:60)
E/flutter ( 4823): #1 FLog._logThis (package:f_logs/model/flog/flog.dart:390:63)
E/flutter ( 4823): #2 FLog.info (package:f_logs/model/flog/flog.dart:99:5)
E/flutter ( 4823): #3 _setLogLevel (package:bowlr/reducers/log_level_reducer.dart:19:8)
E/flutter ( 4823): #4 TypedReducer.call (package:redux/src/utils.dart:111:14)
E/flutter ( 4823): #5 combineReducers.<anonymous closure> (package:redux/src/utils.dart:259:22)
E/flutter ( 4823): #6 appReducer (package:bowlr/reducers/app_state_reducer.dart:56:30)
E/flutter ( 4823): #7 Store._createReduceAndNotify.<anonymous closure> (package:redux/src/store.dart:235:21)
E/flutter ( 4823): #8 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #9 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #10 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #11 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #12 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #13 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #14 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #15 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #16 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #17 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #18 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #19 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #20 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #21 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #22 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #23 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #24 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #25 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #26 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #27 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #28 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #29 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #30 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #31 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #32 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #33 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #34 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #35 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #36 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #37 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #38 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #39 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #40 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #41 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #42 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #43 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #44 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #45 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #46 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #47 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #48 TypedMiddleware.call (package:redux/src/utils.dart:231:18)
E/flutter ( 4823): #49 Store._createDispatchers.<anonymous closure> (package:redux/src/store.dart:255:43)
E/flutter ( 4823): #50 TypedMiddleware.call (package
I have the following custom config in my code
LogsConfig config = FLog.getDefaultConfigurations()
..isLogsEnabled = true
..timestampFormat = TimestampFormat.TIME_FORMAT_FULL_3
..fieldOrderFormatCustom = [
FieldName.TIMESTAMP,
FieldName.LOG_LEVEL,
FieldName.CLASSNAME,
FieldName.METHOD_NAME,
FieldName.TEXT,
FieldName.EXCEPTION,
FieldName.STACKTRACE
]
..isDebuggable = true;
FLog.applyConfigurations(config);
fieldOrderFormat is printed as default:
I/flutter ( 4209): {Assets} {loadFile} {Using the cached copy of assets/files/check.png.} {LogLevel.INFO} {2019-10-22 22:32:48}
I've included permission_handler: ^5.0.0+hotfix.3 in my project and now i'm not able to inclue f_logs
Because f_logs >=1.2.2 depends on permission_handler ^4.0.0 and app depends on permission_handler ^5.0.0+hotfix.3, f_logs >=1.2.2 is forbidden.
I would love to have a method that returns all logs as a simple string variable. Essentially just what printLogs()
does, except it shouldn't write to the console but return the result.
What do you think?
[feature request] exportLogs
should return Future. If you want to share log file, y want to know when log file will be ready
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.