轨道
/
C#
C#
/
练习
/
日志,日志,日志!
日志,日志,日志!

日志,日志,日志!

学习练习

简介

枚举

C# 的 enum 类型表示一组固定的具名常量(也就是枚举)。它的主要用途是提供一种类型安全的方式来处理数字常量,把可用的取值限制在一个预先定义好的集合内。一个简单的枚举可以这样定义:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

如果没有显式赋值,枚举成员会自动获得递增的整数值,其中第一个值为 0。也可以显式赋值:

enum Answer
{
    Maybe = 1,
    Yes = 3,
    No = 5
}

说明

在本练习中,你将处理日志行。

每一行日志都是一个字符串,格式如下:"[<LVL>]: <MESSAGE>"。

以下是不同的日志级别:

  • TRC(trace)
  • DBG(debug)
  • INF(info)
  • WRN(warning)
  • ERR(error)
  • FTL(fatal)

你有三个任务。

1. 解析日志级别

定义一个 LogLevel 枚举,其中包含六个元素,分别对应上面的日志级别。

  • Trace
  • Debug
  • Info
  • Warning
  • Error
  • Fatal

接下来,实现(静态)LogLine.ParseLogLevel() 方法,以解析日志行的日志级别:

LogLine.ParseLogLevel("[INF]: File deleted")
// => LogLevel.Info

2. 支持未知的日志级别

遗憾的是,偶尔会有一些日志行带有未知的日志级别。为了优雅地处理这些日志行,请向 LogLevel 枚举添加一个 Unknown 元素,在解析到未知日志级别时返回它:

LogLine.ParseLogLevel("[XYZ]: Overly specific, out of context message")
// => LogLevel.Unknown

3. 把日志行转换为短格式

日志行中的日志级别相当冗长。为了减少存储日志行所需的磁盘空间,人们设计了一种短格式:"[<ENCODED_LEVEL>]:<MESSAGE>"。

编码后的日志级别就是把日志级别简单映射为一个数字:

  • Unknown - 0
  • Trace - 1
  • Debug - 2
  • Info - 4
  • Warning - 5
  • Error - 6
  • Fatal - 42

实现(静态)LogLine.OutputForShortLog() 方法,用于输出缩短后的日志行格式:

LogLine.OutputForShortLog(LogLevel.Error, "Stack overflow")
// => "6:Stack overflow"
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
C# Exercism

准备好开始 日志,日志,日志! 了吗?

注册 Exercism,借助 62 个概念178 个练习 和真人导师指导,学习并掌握 C#,全部免费。