A very flexible file logger which utilizes "logging" package.

Features

This package provides a simple and concurrent-safe way to log messages to a file. It builds on the existing "logging" package, adding file-handling features such as:

  • Splitting logs into multiple files when they exceed a specified size
  • Creating a new file for each day
  • Automatically deleting old log files after a specified retention period

In addition to file logging, the package supports:

  • Writing logs to the console
  • Defining custom record handlers for extensibility

Getting started

This package is built on top of the logging package. The available log levels follow the same conventions commonly used in software development.

Usage

Creating logger:

void main() {
    final logger = FileLogger(
        logFilePath: 'path/to/log/file.log',
        maxFileSize: 1024 * 1024, // 1 MB
        logToConsole: true,
        logLevel: Level.ALL
    );
}

Simple log output:

void main() {
  logger.info('This is an info message');
}

Logging an error:

void main() {
  try {
    throw Exception('This is a test exception');
  } catch (e, stackTrace) {
    logger.severe('This is a severe message', e, stackTrace);
  }
}

Clearing old log files:

void main() async {
  await logger.deleteOldLogs(7); // Deletes log files older than 7 days
  await logger.clearLogs();
}

Custom format for log messages:

void main() {
    logger.logFormatter =  (LogRecord record, int sequenceNumber) =>
      '${record.time} [${record.level.name}] ($sequenceNumber): ${record.message}\n';
}

Custom format for file names:

void main() {
    logger.fileNameGenerator = (String loggerName, DateTime date) =>
      '${loggerName.isNotEmpty ? '${loggerName}_' : ''}${DateFormat('yyyy-MM-dd').format(date)}';
}

Custom record handler:

void main() {
  logger.recordHandler = (LogRecord record, void Function(LogRecord record) defaultProcessor) {
    defaultProcessor(record);
    print("Perform additional tasks");
  };
}

Additional information

You can find more information about this package on GitHub: https://github.com/elvedin-hamzagic/file-logs

Libraries

file_logs