// Copyright (C) 2015 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package log;

option java_package = "com.android.tools.idea.editors.gfxtrace.service.log";
option java_outer_classname = "LogProtos";

// Severity defines the severity of a logging message.
// The levels match the ones defined in rfc5424 for syslog.
enum Severity {
    // Emergency indicates the system is unusable, no further data should be trusted.
    Emergency = 0;
    // Alert indicates action must be taken immediately.
    Alert = 1;
    // Critical indicates errors severe enough to terminate processing.
    Critical = 2;
    // Error indicates non terminal failure conditions that may have an effect on results.
    Error = 3;
    // Warning indicates issues that might affect performance or compatibility, but could be ignored.
    Warning = 4;
    // Notice indicates normal but significant conditions.
    Notice = 5;
    // Info indicates minor informational messages that should generally be ignored.
    Info = 6;
    // Debug indicates verbose debug-level messages.
    Debug = 7;
}
