diff --git a/CHANGELOG.md b/CHANGELOG.md index c43c242c..19cec9f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 2.0.0-alpha.17 +* Revert the migration to `lumberjack` for now. In the future, when it's more +stable, there'll be a conversion, perhaps. + # 2.0.0-alpha.16 * Use `package:lumberjack` for logging. diff --git a/example/handle_error.dart b/example/handle_error.dart index d7d302a8..ea058457 100644 --- a/example/handle_error.dart +++ b/example/handle_error.dart @@ -3,12 +3,16 @@ import 'dart:io'; import 'package:angel_container/mirrors.dart'; import 'package:angel_framework/angel_framework.dart'; import 'package:angel_framework/http.dart'; -import 'package:lumberjack/lumberjack.dart'; -import 'package:lumberjack/io.dart'; +import 'package:logging/logging.dart'; main() async { var app = new Angel(reflector: MirrorsReflector()) - ..logger = (new Logger('angel')..pipe(new AnsiLogPrinter.toStdout())) + ..logger = (new Logger('angel') + ..onRecord.listen((rec) { + print(rec); + if (rec.error != null) print(rec.error); + if (rec.stackTrace != null) print(rec.stackTrace); + })) ..encoders.addAll({'gzip': gzip.encoder}); app.fallback( diff --git a/example/http2/body_parsing.dart b/example/http2/body_parsing.dart index 7a515f05..2cb8110b 100644 --- a/example/http2/body_parsing.dart +++ b/example/http2/body_parsing.dart @@ -3,13 +3,16 @@ import 'package:angel_framework/angel_framework.dart'; import 'package:angel_framework/http.dart'; import 'package:angel_framework/http2.dart'; import 'package:file/local.dart'; -import 'package:lumberjack/lumberjack.dart'; -import 'package:lumberjack/io.dart'; +import 'package:logging/logging.dart'; main() async { var app = new Angel(); - app.logger = new Logger('angel'); - app.logger.pipe(new AnsiLogPrinter.toStdout()); + app.logger = new Logger('angel') + ..onRecord.listen((rec) { + print(rec); + if (rec.error != null) print(rec.error); + if (rec.stackTrace != null) print(rec.stackTrace); + }); var publicDir = new Directory('example/public'); var indexHtml = @@ -26,11 +29,10 @@ main() async { try { ctx.setAlpnProtocols(['h2'], true); } catch (e, st) { - app.logger.error( - 'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.', - error: e, - stackTrace: st, - ); + app.logger.severe( + 'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.', + e, + st); } var http1 = new AngelHttp(app); diff --git a/example/http2/common.dart b/example/http2/common.dart new file mode 100644 index 00000000..b937b43f --- /dev/null +++ b/example/http2/common.dart @@ -0,0 +1,7 @@ +import 'package:logging/logging.dart'; + +void dumpError(LogRecord rec) { + print(rec); + if (rec.error != null) print(rec.error); + if (rec.stackTrace != null) print(rec.stackTrace); +} diff --git a/example/http2/main.dart b/example/http2/main.dart index 377ec6a6..f2a7be38 100644 --- a/example/http2/main.dart +++ b/example/http2/main.dart @@ -2,8 +2,8 @@ import 'dart:io'; import 'package:angel_framework/angel_framework.dart'; import 'package:angel_framework/http.dart'; import 'package:angel_framework/http2.dart'; -import 'package:lumberjack/lumberjack.dart'; -import 'package:lumberjack/io.dart'; +import 'package:logging/logging.dart'; +import 'common.dart'; main() async { var app = new Angel() @@ -11,8 +11,7 @@ main() async { 'gzip': gzip.encoder, 'deflate': zlib.encoder, }); - app.logger = new Logger('angel'); - app.logger.pipe(new AnsiLogPrinter.toStdout()); + app.logger = new Logger('angel')..onRecord.listen(dumpError); app.get('/', (req, res) => 'Hello HTTP/2!!!'); @@ -26,10 +25,10 @@ main() async { try { ctx.setAlpnProtocols(['h2'], true); } catch (e, st) { - app.logger.error( + app.logger.severe( 'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.', - error: e, - stackTrace: st, + e, + st, ); } diff --git a/example/http2/server_push.dart b/example/http2/server_push.dart index 15f1ce83..0c99420b 100644 --- a/example/http2/server_push.dart +++ b/example/http2/server_push.dart @@ -3,13 +3,16 @@ import 'package:angel_framework/angel_framework.dart'; import 'package:angel_framework/http.dart'; import 'package:angel_framework/http2.dart'; import 'package:file/local.dart'; -import 'package:lumberjack/lumberjack.dart'; -import 'package:lumberjack/io.dart'; +import 'package:logging/logging.dart'; main() async { var app = new Angel(); - app.logger = new Logger('angel'); - app.logger.pipe(new AnsiLogPrinter.toStdout()); + app.logger = new Logger('angel') + ..onRecord.listen((rec) { + print(rec); + if (rec.error != null) print(rec.error); + if (rec.stackTrace != null) print(rec.stackTrace); + }); var publicDir = new Directory('example/http2/public'); var indexHtml = @@ -42,11 +45,10 @@ main() async { try { ctx.setAlpnProtocols(['h2'], true); } catch (e, st) { - app.logger.error( - 'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.', - error: e, - stackTrace: st, - ); + app.logger.severe( + 'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.', + e, + st); } var http1 = new AngelHttp(app); diff --git a/example/main.dart b/example/main.dart index c671de60..0a07dcd5 100644 --- a/example/main.dart +++ b/example/main.dart @@ -1,8 +1,7 @@ import 'package:angel_container/mirrors.dart'; import 'package:angel_framework/angel_framework.dart'; import 'package:angel_framework/http.dart'; -import 'package:lumberjack/lumberjack.dart'; -import 'package:lumberjack/io.dart'; +import 'package:logging/logging.dart'; main() async { var app = new Angel( @@ -10,7 +9,12 @@ main() async { reflector: MirrorsReflector(), ); - app.logger.pipe(AnsiLogPrinter.toStdout()); + app.logger = new Logger('angel') + ..onRecord.listen((rec) { + print(rec); + if (rec.error != null) print(rec.error); + if (rec.stackTrace != null) print(rec.stackTrace); + }); // Index route. Returns JSON. app.get('/', (req, res) => 'Welcome to Angel!'); diff --git a/lib/src/core/driver.dart b/lib/src/core/driver.dart index ae556e06..5580f01a 100644 --- a/lib/src/core/driver.dart +++ b/lib/src/core/driver.dart @@ -167,8 +167,7 @@ abstract class Driver< var error = e.error ?? e; var trace = new Trace.from(e.stackTrace ?? StackTrace.current).terse; - app.logger.error(e.message ?? e.toString(), - error: error, stackTrace: trace); + app.logger.severe(e.message ?? e.toString(), error, trace); } return handleAngelHttpException( @@ -178,7 +177,7 @@ abstract class Driver< var zoneSpec = new ZoneSpecification( print: (self, parent, zone, line) { if (app.logger != null) - app.logger.information(line); + app.logger.info(line); else parent.print(zone, line); }, @@ -201,8 +200,7 @@ abstract class Driver< } if (app.logger != null) { - app.logger.error(e.message ?? e.toString(), - error: error, stackTrace: trace); + app.logger.severe(e.message ?? e.toString(), error, trace); } return handleAngelHttpException( @@ -213,8 +211,8 @@ abstract class Driver< // Ideally, we won't be in a position where an absolutely fatal error occurs, // but if so, we'll need to log it. if (app.logger != null) { - app.logger.error('Fatal error occurred when processing $uri.', - error: e, stackTrace: trace); + app.logger.severe( + 'Fatal error occurred when processing $uri.', e, trace); } else { stderr ..writeln('Fatal error occurred when processing ' @@ -255,7 +253,7 @@ abstract class Driver< {bool ignoreFinalizers: false}) { if (req == null || res == null) { try { - app.logger?.error(null, error: e, stackTrace: st); + app.logger?.severe(null, e, st); setStatusCode(response, 500); writeStringToResponse(response, '500 Internal Server Error'); closeResponse(response); @@ -287,7 +285,7 @@ abstract class Driver< void _cleanup(_) { if (!app.isProduction && app.logger != null) { var sw = req.container.make(); - app.logger.information( + app.logger.info( "${res.statusCode} ${req.method} ${req.uri} (${sw?.elapsedMilliseconds ?? 'unknown'} ms)"); } } diff --git a/lib/src/core/server.dart b/lib/src/core/server.dart index 4c8e71bc..0a1ab0aa 100644 --- a/lib/src/core/server.dart +++ b/lib/src/core/server.dart @@ -10,9 +10,7 @@ import 'package:angel_http_exception/angel_http_exception.dart'; import 'package:angel_route/angel_route.dart'; import 'package:combinator/combinator.dart'; import 'package:http_parser/http_parser.dart'; -import 'package:logging/logging.dart' as dart; -import 'package:lumberjack/logging.dart'; -import 'package:lumberjack/lumberjack.dart'; +import 'package:logging/logging.dart'; import 'package:mime/mime.dart'; import 'package:tuple/tuple.dart'; @@ -92,20 +90,7 @@ class Angel extends Routable { Angel get parent => _parent; /// Outputs diagnostics and debug messages. - Logger get logger => _logger; - - set logger(value) { - if (_logger != null) _logger.close(); - if (value is dart.Logger) { - _logger = new ConvertingLogger(value); - } else if (value is Logger) { - _logger = value; - } else if (value != null) { - throw new ArgumentError('Unsupported logger: $value'); - } - } - - Logger _logger; + Logger logger; /// Plug-ins to be called right before server startup. /// @@ -307,7 +292,7 @@ class Angel extends Routable { if (isProduction == true || force == true) { _isProduction = true; _flattened ??= flatten(this); - logger?.notice('Angel is running in production mode.'); + logger?.info('Angel is running in production mode.'); } } @@ -367,12 +352,11 @@ class Angel extends Routable { Angel( {Reflector reflector: const EmptyReflector(), - logger, + this.logger, this.allowMethodOverrides: true, this.serializer, this.viewGenerator}) : super(reflector) { - if (logger != null) this.logger = logger; bootstrapContainer(); viewGenerator ??= noViewEngineConfigured; serializer ??= json.encode; diff --git a/lib/src/http2/angel_http2.dart b/lib/src/http2/angel_http2.dart index a041e5f5..3a90e58f 100644 --- a/lib/src/http2/angel_http2.dart +++ b/lib/src/http2/angel_http2.dart @@ -191,8 +191,8 @@ class _AngelHttp2ServerSocket extends Stream }, onDone: _ctrl.close, onError: (e, st) { - driver.app.logger.warning('HTTP/2 incoming connection failure: ', - error: e, stackTrace: st as StackTrace); + driver.app.logger.warning( + 'HTTP/2 incoming connection failure: ', e, st as StackTrace); }, ); } diff --git a/lib/src/http2/http2_request_context.dart b/lib/src/http2/http2_request_context.dart index 3381383f..b000be83 100644 --- a/lib/src/http2/http2_request_context.dart +++ b/lib/src/http2/http2_request_context.dart @@ -31,7 +31,7 @@ class Http2RequestContext extends RequestContext { Socket socket, Angel app, Map sessions, - Uuid uuid) async { + Uuid uuid) { var c = new Completer(); var req = new Http2RequestContext._(app.container.createChild()) ..app = app @@ -63,7 +63,7 @@ class Http2RequestContext extends RequestContext { stream.incomingMessages.listen((msg) { if (msg is DataStreamMessage) { - if (!c.isCompleted) finalize(); + finalize(); req._body.add(msg.bytes); } else if (msg is HeadersStreamMessage) { for (var header in msg.headers) { @@ -108,10 +108,10 @@ class Http2RequestContext extends RequestContext { } } - if (msg.endStream && !c.isCompleted) finalize(); + if (msg.endStream) finalize(); } }, onDone: () { - if (!c.isCompleted) finalize(); + finalize(); }, cancelOnError: true, onError: c.completeError); // Apply session diff --git a/pubspec.yaml b/pubspec.yaml index b091d332..c6b11091 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: angel_framework -version: 2.0.0-alpha.16 +version: 2.0.0-alpha.17 description: A high-powered HTTP server with dependency injection, routing and much more. author: Tobe O homepage: https://github.com/angel-dart/angel_framework @@ -17,7 +17,6 @@ dependencies: http_server: ^0.9.0 http2: ">=0.1.7 <2.0.0" logging: ">=0.11.3 <1.0.0" - lumberjack: ^1.0.0-rc.0 matcher: ^0.12.0 merge_map: ^1.0.0 meta: ^1.0.0