2.0.0-alpha.16

This commit is contained in:
Tobe O 2018-12-10 22:19:16 -05:00
parent f95de91bf5
commit 803f446a01
10 changed files with 49 additions and 32 deletions

View file

@ -1,3 +1,6 @@
# 2.0.0-alpha.16
* Use `package:lumberjack` for logging.
# 2.0.0-alpha.15 # 2.0.0-alpha.15
* Remove dependency on `body_parser`. * Remove dependency on `body_parser`.
* `RequestContext` now exposes a `Stream<List<int>> get body` getter. * `RequestContext` now exposes a `Stream<List<int>> get body` getter.

View file

@ -25,10 +25,10 @@ main() async {
try { try {
ctx.setAlpnProtocols(['h2'], true); ctx.setAlpnProtocols(['h2'], true);
} catch (e, st) { } catch (e, st) {
app.logger.severe( app.logger.error(
'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.', 'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.',
e, error: e,
st, stackTrace: st,
); );
} }

View file

@ -25,10 +25,10 @@ main() async {
try { try {
ctx.setAlpnProtocols(['h2'], true); ctx.setAlpnProtocols(['h2'], true);
} catch (e, st) { } catch (e, st) {
app.logger.severe( app.logger.error(
'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.', 'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.',
e, error: e,
st, stackTrace: st,
); );
} }

View file

@ -41,10 +41,10 @@ main() async {
try { try {
ctx.setAlpnProtocols(['h2'], true); ctx.setAlpnProtocols(['h2'], true);
} catch (e, st) { } catch (e, st) {
app.logger.severe( app.logger.error(
'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.', 'Cannot set ALPN protocol on server to `h2`. The server will only serve HTTP/1.x.',
e, error: e,
st, stackTrace: st,
); );
} }

View file

@ -1,7 +1,8 @@
import 'package:angel_container/mirrors.dart'; import 'package:angel_container/mirrors.dart';
import 'package:angel_framework/angel_framework.dart'; import 'package:angel_framework/angel_framework.dart';
import 'package:angel_framework/http.dart'; import 'package:angel_framework/http.dart';
import 'package:logging/logging.dart'; import 'package:lumberjack/lumberjack.dart';
import 'package:lumberjack/io.dart';
main() async { main() async {
var app = new Angel( var app = new Angel(
@ -9,13 +10,7 @@ main() async {
reflector: MirrorsReflector(), reflector: MirrorsReflector(),
); );
hierarchicalLoggingEnabled = true; app.logger.pipe(AnsiLogPrinter.toStdout());
app.logger.onRecord.listen((rec) {
print(rec);
if (rec.error != null) print(rec.error);
if (rec.stackTrace != null) print(rec.stackTrace);
});
// Index route. Returns JSON. // Index route. Returns JSON.
app.get('/', (req, res) => 'Welcome to Angel!'); app.get('/', (req, res) => 'Welcome to Angel!');

View file

@ -167,7 +167,8 @@ abstract class Driver<
var error = e.error ?? e; var error = e.error ?? e;
var trace = var trace =
new Trace.from(e.stackTrace ?? StackTrace.current).terse; new Trace.from(e.stackTrace ?? StackTrace.current).terse;
app.logger.severe(e.message ?? e.toString(), error, trace); app.logger.error(e.message ?? e.toString(),
error: error, stackTrace: trace);
} }
return handleAngelHttpException( return handleAngelHttpException(
@ -177,7 +178,7 @@ abstract class Driver<
var zoneSpec = new ZoneSpecification( var zoneSpec = new ZoneSpecification(
print: (self, parent, zone, line) { print: (self, parent, zone, line) {
if (app.logger != null) if (app.logger != null)
app.logger.info(line); app.logger.information(line);
else else
parent.print(zone, line); parent.print(zone, line);
}, },
@ -200,7 +201,8 @@ abstract class Driver<
} }
if (app.logger != null) { if (app.logger != null) {
app.logger.severe(e.message ?? e.toString(), error, trace); app.logger.error(e.message ?? e.toString(),
error: error, stackTrace: trace);
} }
return handleAngelHttpException( return handleAngelHttpException(
@ -211,8 +213,8 @@ abstract class Driver<
// Ideally, we won't be in a position where an absolutely fatal error occurs, // Ideally, we won't be in a position where an absolutely fatal error occurs,
// but if so, we'll need to log it. // but if so, we'll need to log it.
if (app.logger != null) { if (app.logger != null) {
app.logger.severe( app.logger.error('Fatal error occurred when processing $uri.',
'Fatal error occurred when processing $uri.', e, trace); error: e, stackTrace: trace);
} else { } else {
stderr stderr
..writeln('Fatal error occurred when processing ' ..writeln('Fatal error occurred when processing '
@ -253,7 +255,7 @@ abstract class Driver<
{bool ignoreFinalizers: false}) { {bool ignoreFinalizers: false}) {
if (req == null || res == null) { if (req == null || res == null) {
try { try {
app.logger?.severe(e, st); app.logger?.error(null, error: e, stackTrace: st);
setStatusCode(response, 500); setStatusCode(response, 500);
writeStringToResponse(response, '500 Internal Server Error'); writeStringToResponse(response, '500 Internal Server Error');
closeResponse(response); closeResponse(response);
@ -285,7 +287,7 @@ abstract class Driver<
void _cleanup(_) { void _cleanup(_) {
if (!app.isProduction && app.logger != null) { if (!app.isProduction && app.logger != null) {
var sw = req.container.make<Stopwatch>(); var sw = req.container.make<Stopwatch>();
app.logger.info( app.logger.information(
"${res.statusCode} ${req.method} ${req.uri} (${sw?.elapsedMilliseconds ?? 'unknown'} ms)"); "${res.statusCode} ${req.method} ${req.uri} (${sw?.elapsedMilliseconds ?? 'unknown'} ms)");
} }
} }

View file

@ -10,7 +10,9 @@ import 'package:angel_http_exception/angel_http_exception.dart';
import 'package:angel_route/angel_route.dart'; import 'package:angel_route/angel_route.dart';
import 'package:combinator/combinator.dart'; import 'package:combinator/combinator.dart';
import 'package:http_parser/http_parser.dart'; import 'package:http_parser/http_parser.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart' as dart;
import 'package:lumberjack/logging.dart';
import 'package:lumberjack/lumberjack.dart';
import 'package:mime/mime.dart'; import 'package:mime/mime.dart';
import 'package:tuple/tuple.dart'; import 'package:tuple/tuple.dart';
@ -90,7 +92,20 @@ class Angel extends Routable {
Angel get parent => _parent; Angel get parent => _parent;
/// Outputs diagnostics and debug messages. /// Outputs diagnostics and debug messages.
Logger logger; 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 {
throw new ArgumentError();
}
}
Logger _logger;
/// Plug-ins to be called right before server startup. /// Plug-ins to be called right before server startup.
/// ///
@ -292,7 +307,7 @@ class Angel extends Routable {
if (isProduction == true || force == true) { if (isProduction == true || force == true) {
_isProduction = true; _isProduction = true;
_flattened ??= flatten(this); _flattened ??= flatten(this);
logger?.config('Angel is running in production mode.'); logger?.notice('Angel is running in production mode.');
} }
} }
@ -352,11 +367,12 @@ class Angel extends Routable {
Angel( Angel(
{Reflector reflector: const EmptyReflector(), {Reflector reflector: const EmptyReflector(),
this.logger, logger,
this.allowMethodOverrides: true, this.allowMethodOverrides: true,
this.serializer, this.serializer,
this.viewGenerator}) this.viewGenerator})
: super(reflector) { : super(reflector) {
if (logger != null) this.logger = logger;
bootstrapContainer(); bootstrapContainer();
viewGenerator ??= noViewEngineConfigured; viewGenerator ??= noViewEngineConfigured;
serializer ??= json.encode; serializer ??= json.encode;

View file

@ -191,8 +191,8 @@ class _AngelHttp2ServerSocket extends Stream<SecureSocket>
}, },
onDone: _ctrl.close, onDone: _ctrl.close,
onError: (e, st) { onError: (e, st) {
driver.app.logger.warning( driver.app.logger.warning('HTTP/2 incoming connection failure: ',
'HTTP/2 incoming connection failure: ', e, st as StackTrace); error: e, stackTrace: st as StackTrace);
}, },
); );
} }

View file

@ -1,5 +1,5 @@
name: angel_framework name: angel_framework
version: 2.0.0-alpha.15 version: 2.0.0-alpha.16
description: A high-powered HTTP server with dependency injection, routing and much more. description: A high-powered HTTP server with dependency injection, routing and much more.
author: Tobe O <thosakwe@gmail.com> author: Tobe O <thosakwe@gmail.com>
homepage: https://github.com/angel-dart/angel_framework homepage: https://github.com/angel-dart/angel_framework
@ -17,6 +17,7 @@ dependencies:
http_server: ^0.9.0 http_server: ^0.9.0
http2: ">=0.1.7 <2.0.0" http2: ">=0.1.7 <2.0.0"
logging: ">=0.11.3 <1.0.0" logging: ">=0.11.3 <1.0.0"
lumberjack: ^1.0.0-rc.0
matcher: ^0.12.0 matcher: ^0.12.0
merge_map: ^1.0.0 merge_map: ^1.0.0
meta: ^1.0.0 meta: ^1.0.0