请求日志记录器?

ci coverage style: very good analysis License: MIT

一个用于 shelfdart_frog 的中间件,可帮助编写日志。

功能 ✨

  • ?? 开箱即用支持 Dart FrogShelf ?️。
  • ☁️ 内置支持控制台日志和 Google Cloud Logging
  • ? 自动将日志记录器注入您的请求处理程序。
  • ? 自动记录未捕获的错误。
  • ? 包括大量的调试信息,包括堆栈跟踪。
  • ? 代码覆盖率 100%,经 Very Good Workflows 验证。

快速开始 ?

使用 Dart Frog ??

这是一个简化的示例。完整示例请访问 /examples/dart_frog

设置 ?️

在您的顶级 _middlware.dart 文件中添加 RequestLogger 中间件。

import 'package:dart_frog/dart_frog.dart';
import 'package:request_logger/request_logger.dart';
import 'package:request_logger/log_formatters.dart';

Handler middleware(Handler handler) {
  return handler.use(
    fromShelfMiddleware(
      RequestLogger.middleware(logFormatter: formatSimpleLog()),
    ),
  );
}

写入日志 ?

RequestContext 读取 RequestLogger

import 'package:dart_frog/dart_frog.dart';
import 'package:request_logger/request_logger.dart';

Response onRequest(RequestContext context) {
  final logger = context.read<RequestLogger>();
  logger.debug('Hello Logs');
  return Response();
}

使用 Shelf ?️

这是一个简化的示例。完整示例请访问 /examples/shelf

设置 ?️

在您的 Pipeline 中添加 RequestLogger 中间件。

import 'package:request_logger/request_logger.dart';
import 'package:request_logger/log_formatters.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart';

void main() {
  final handler = Pipeline()
      .addMiddleware(RequestLogger.middleware(logFormatter: formatSimpleLog()))
      .addHandler(_router);
  await serve(handler, ip, port);
}

写入日志 ?

通过从 Request 中提取来读取 RequestLogger

import 'package:request_logger/request_logger.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart';

Response _handler(Request request) {
  final logger = RequestLogger.extractLogger(request);
  logger.debug('Hello Logs');

  return Response.ok('Hello, World!\n');
}

使用不同的日志格式

请求日志记录器通过在添加中间件时提供不同的 LogFormatter 来支持日志格式。您可以提供自己的,也可以使用内置格式化程序之一。

内置格式化程序

所有内置日志格式都位于 package:request_logger/log_formatters.dart 下。

当前的内置日志记录器有

  • formatSimpleLog():格式化没有特定规范的日志——非常适合本地开发。
  • formatCloudLoggingLog():为 Google Cloud Logging 格式化日志

创建您自己的格式化程序

您可以为自己的规范创建自己的格式化程序!只需确保它返回一个 String

示例

LogFormatter formatMyCustomLog() => ({
      required Severity severity,
      required String message,
      required Request request,
      Map<String, dynamic>? payload,
      Map<String, dynamic>? labels,
      bool? isError,
      Chain? chain,
      Frame? stackFrame,
    }) {
      return 'My custom log: $message';
    };

GitHub

查看 Github