blob: b2f7c88f110929069eaa1249bd90cf2a02ae5f14 [file] [log] [blame]
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/// [Level]s to control logging output. Logging can be enabled to include all
/// levels above certain [Level]. [Level]s are ordered using an integer
/// value [Level.value]. The predefined [Level] constants below are sorted as
/// follows (in descending order): [Level.SHOUT], [Level.SEVERE],
/// [Level.WARNING], [Level.INFO], [Level.CONFIG], [Level.FINE], [Level.FINER],
/// [Level.FINEST], and [Level.ALL].
///
/// We recommend using one of the predefined logging levels. If you define your
/// own level, make sure you use a value between those used in [Level.ALL] and
/// [Level.OFF].
class Level implements Comparable<Level> {
final String name;
/// Unique value for this level. Used to order levels, so filtering can
/// exclude messages whose level is under certain value.
final int value;
const Level(this.name, this.value);
/// Special key to turn on logging for all levels ([value] = 0).
static const Level ALL = Level('ALL', 0);
/// Special key to turn off all logging ([value] = 2000).
static const Level OFF = Level('OFF', 2000);
/// Key for highly detailed tracing ([value] = 300).
static const Level FINEST = Level('FINEST', 300);
/// Key for fairly detailed tracing ([value] = 400).
static const Level FINER = Level('FINER', 400);
/// Key for tracing information ([value] = 500).
static const Level FINE = Level('FINE', 500);
/// Key for static configuration messages ([value] = 700).
static const Level CONFIG = Level('CONFIG', 700);
/// Key for informational messages ([value] = 800).
static const Level INFO = Level('INFO', 800);
/// Key for potential problems ([value] = 900).
static const Level WARNING = Level('WARNING', 900);
/// Key for serious failures ([value] = 1000).
static const Level SEVERE = Level('SEVERE', 1000);
/// Key for extra debugging loudness ([value] = 1200).
static const Level SHOUT = Level('SHOUT', 1200);
static const List<Level> LEVELS = [
ALL,
FINEST,
FINER,
FINE,
CONFIG,
INFO,
WARNING,
SEVERE,
SHOUT,
OFF
];
@override
bool operator ==(Object other) => other is Level && value == other.value;
bool operator <(Level other) => value < other.value;
bool operator <=(Level other) => value <= other.value;
bool operator >(Level other) => value > other.value;
bool operator >=(Level other) => value >= other.value;
@override
int compareTo(Level other) => value - other.value;
@override
int get hashCode => value;
@override
String toString() => name;
}