logging_collector 0.0.7 copy "logging_collector: ^0.0.7" to clipboard
logging_collector: ^0.0.7 copied to clipboard

outdated

Package for logs sharing.

example/lib/main.dart

import 'dart:async';
import 'dart:io';
import 'dart:math';

import 'package:archive/archive_io.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
import 'package:logging_collector/logging_collector.dart';
import 'package:path_provider/path_provider.dart';
import 'package:provider/provider.dart';
import 'package:share_plus/share_plus.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  final Directory docsDirectory = await getApplicationDocumentsDirectory();
  final logsDirectoryPath = '${docsDirectory.path}/logs';
  final logsDirectory = Directory(logsDirectoryPath);
  logsDirectory.createSync();

  final appenders = [
    RollingFileAppender(
      directoryPath: logsDirectoryPath,
      fileMaxSize: 1024 * 1024,
      fileMaxCount: 3,
    ),
  ];

  final loggingCollectorConfig = LoggingCollectorConfig(
    logsDirectoryPath,
    () async {
      final zipEncoder = ZipFileEncoder();
      final zipPath = '${docsDirectory.path}/logs.zip';
      zipEncoder.zipDirectory(
        logsDirectory,
        filename: zipPath,
      );

      Share.shareXFiles(
        [XFile(zipPath)],
        subject: 'Share',
        text: 'Share logs',
      );
    },
  );

  Logger.root.level = Level.ALL;

  Logger.root.onRecord.listen(
    (LogRecord record) async {
      String log;
      if (record.error != null) {
        log = '${record.level.name}: ${record.time}: ${record.loggerName}:'
            ' ${record.message}: ${record.error}\n'
            'stackTrace\n${record.stackTrace}\n';
      } else {
        log = '${record.level.name}: ${record.time}: ${record.loggerName}:'
            ' ${record.message}\n';
      }

      for (final appender in appenders) {
        await appender.append(log);
      }
    },
  );

  runApp(
    Provider<LoggingCollectorConfig>.value(
      value: loggingCollectorConfig,
      child: const MyApp(),
    ),
  );
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _logger = Logger('MyApp');

  @override
  void initState() {
    super.initState();
    Timer.periodic(
      const Duration(seconds: 2),
      (timer) {
        _logger.fine('message id ${Random().nextDouble()}');
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.green),
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: const Placeholder(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.of(context).push(
            CupertinoPageRoute(
                builder: (context) => LoggingCollectorWidget(context.read())),
          );
        },
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}
0
likes
0
points
39
downloads

Publisher

unverified uploader

Weekly Downloads

Package for logs sharing.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

equatable, flutter, flutter_bloc, provider

More

Packages that depend on logging_collector