logkeeper 1.1.1 copy "logkeeper: ^1.1.1" to clipboard
logkeeper: ^1.1.1 copied to clipboard

Simple file logger that works out of the box with automatic timestamping and session management.

LogKeeper #

A simple, plug-and-play file logger for Dart with automatic timestamping and session management.

Features #

  • Zero Configuration - Works out of the box, no setup required
  • 📁 Automatic File Management - Creates timestamped log files for each session
  • Built-in Timestamps - Every log entry includes automatic timestamping
  • 🎯 Simple API - Clean, intuitive methods for different log levels
  • 💾 Persistent Logging - All logs are saved to disk automatically

Getting Started #

Installation #

Add this to your package's pubspec.yaml file:

dependencies:
  logkeeper: ^1.1.0

Then run:

flutter pub get

Basic Usage (No Configuration Needed!) #

import 'package:logkeeper/logkeeper.dart';

void main() async {
  // Just start logging - no setup required!
  LogKeeper.info('Application started');
  LogKeeper.warning('Low memory detected');
  LogKeeper.error('Connection failed');
  LogKeeper.critical('System failure');

  // Save logs before exiting
  await LogKeeper.saveLogs();
}

That's it! LogKeeper will automatically create a logs/ directory and save all your logs.

Custom Configuration (Optional) #

If you need to customize LogKeeper's behavior, call configure() before any logging operations (as the first line in main()):

import 'package:intl/intl.dart';
import 'package:logkeeper/logkeeper.dart';
import 'package:logkeeper/log_level.dart';

void main() async {
  // Optional: customize if needed (call FIRST if you use it)
  LogKeeper.configure(
    logDirectory: 'custom_logs',
    minLevelForProduction: LogLevel.warning,
    fileNameDateFormat: DateFormat('yyyy_MM_dd-HH_mm'),
    timestampFormat: DateFormat('HH:mm:ss.SSS'),
    maxLogAgeDays: 7,
    writeToFileInDevMode: true,
  );

  // Now log as usual
  LogKeeper.info('Application started with custom config');
  
  await LogKeeper.saveLogs();
}

Configuration Options #

All parameters are optional - defaults work great for most cases:

Parameter Type Default Description
logDirectory String 'logs' Directory where log files are saved
minLevelForProduction LogLevel LogLevel.info Minimum level to log in production
maxLogAgeDays int? null Auto-delete logs older than N days
fileNameDateFormat DateFormat yyyy-MM-dd_HH-mm-ss Format for log file names
timestampFormat DateFormat HH:mm:ss Format for timestamps in entries
writeToFileInDevMode bool false Write to file in development mode

Log Levels #

LogKeeper supports four log levels:

Method Use Case Example
info() General information LogKeeper.info('User logged in')
warning() Potentially harmful situations LogKeeper.warning('Disk space low')
error() Error events LogKeeper.error('Network timeout')
critical() Severe errors LogKeeper.critical('Database corrupted')

Log File Format #

Log files are created in the log directory (default: logs/) with timestamps:

logs/
└── 2025-10-18_14-30-45.log

Each log entry includes automatic timestamps:

[14:30:45] INFO: Application started
[14:30:46] WARNING: Low memory detected
[14:30:47] ERROR: Connection failed

Best Practices #

Always Save Logs #

Call saveLogs() before your application exits to ensure all logs are written to disk:

void main() async {
  LogKeeper.info('App started');
  // ... your code ...
  await LogKeeper.saveLogs();  // Don't forget!
}

If You Use configure(), Call It First #

Configuration is optional, but if you do use it, call it before logging:

void main() async {
  LogKeeper.configure(/* settings */);  // If used, must be first
  LogKeeper.info('App started');        // Then log normally
  await LogKeeper.saveLogs();
}

Use Appropriate Log Levels #

Choose the right log level for each situation:

  • INFO: Normal operations, state changes, milestones
  • WARNING: Unusual situations that don't prevent functionality
  • ERROR: Errors that affect functionality but allow recovery
  • CRITICAL: Severe errors requiring immediate attention

Be Descriptive #

Write clear, actionable log messages:

// ❌ Bad
LogKeeper.error('Error');

// ✅ Good
LogKeeper.error('Failed to connect to database: connection timeout after 30s');

FAQ #

Do I need to configure LogKeeper? #

No! LogKeeper works perfectly without any configuration. The defaults are sensible and work for most applications. Only use configure() if you need custom behavior.

If I do configure, when should I call it? #

If you choose to use configure(), call it as the first line in main(), before any logging operations.

Where are log files stored? #

By default, log files are stored in a logs/ directory relative to your application's working directory. You can customize this with the logDirectory parameter.

What happens if I don't call saveLogs()? #

Some log entries may not be written to disk as they remain in the buffer. Always call saveLogs() before exiting.

Contributing #

Contributions are welcome! Please feel free to submit a Pull Request.

License #

This project is licensed under the MIT License - see the LICENSE file for details.

Support #

If you encounter any issues or have questions, please open an issue on GitHub.

Changelog #

See CHANGELOG.md for a list of changes in each version.

0
likes
0
points
11
downloads

Publisher

unverified uploader

Weekly Downloads

Simple file logger that works out of the box with automatic timestamping and session management.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, intl, path

More

Packages that depend on logkeeper