请求日志记录器?
一个用于 shelf 和 dart_frog 的中间件,可帮助编写日志。
功能 ✨
- ?? 开箱即用支持 Dart Frog 和 Shelf ?️。
- ☁️ 内置支持控制台日志和 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';
};