package level import ( "git.ma-al.com/maal-libraries/observer/pkg/syslog" "go.opentelemetry.io/otel/attribute" ) type SeverityLevel uint8 const ( // A magical zero value. // WARN: DO NOT USE IN LOGS OR BASICALLY EVER unset SeverityLevel = iota // This event requires an immediate action. If you suspect that occurence of an event may signal that the // data will get lost, corrupted, or that the application will change its behaviour following the event in // an undesired way, select the ALERT level. ALERT // A critical error has occured. Critical errors are such which can be tough to fix or made the users // experience significantly worse but unlike errors that trigger ALERT they can be fixed at any moment. CRIT // An error has occured but it is not expected to cause any serious issues. These will be often // `Internal Server Error` responses from an HTTP server. ERR // Signals that something suspicious has happened, for example, a query took too long to execute, gaining access // to a resource took multiple attempts, a conflict was automatically resolved, etc. WARN // Used to inform about standard, expected events of an application, like creation of a new object or a new // log-in from a user. Information that could be: // - used to audit the application, // - resolve customer's complaints, // - track history of significant changes, // - calculate valuable statistics; // should be collected and logged at this level. INFO // Verbose information that is useful and meaningful to application developers and system administrators. DEBUG // Extremely verbose information that can be used to investigate performance of specific parts of an application. // It is transled to [syslog.DEBUG] by [IntoSyslogLevel]. TRACE ) func (l SeverityLevel) String() string { switch l { case ALERT: return "ALERT" case CRIT: return "CRIT" case ERR: return "ERR" case WARN: return "WARN" case INFO: return "INFO" case DEBUG: return "DEBUG" case TRACE: return "TRACE" default: return "CRIT" } } func FromString(level string) SeverityLevel { switch level { case "ALERT": return ALERT case "CRIT": return CRIT case "ERR": return ERR case "WARN": return WARN case "INFO": return INFO case "DEBUG": return DEBUG case "TRACE": return TRACE default: return unset } } func (lvl SeverityLevel) IntoTraceAttribute() attribute.KeyValue { return attribute.String("level", lvl.String()) } func (lvl SeverityLevel) IntoSyslogLevel() syslog.SyslogLevel { switch lvl { case ALERT: return syslog.ALERT case CRIT: return syslog.CRIT case ERR: return syslog.ERR case WARN: return syslog.WARNING case INFO: return syslog.INFO case DEBUG: return syslog.DEBUG case TRACE: return syslog.DEBUG default: return syslog.EMERG } }