【Free Style】华为云之Python实践(四)

举报
yd_79585289 发表于 2017/11/24 07:49:22 2017/11/24
8k+ 0 0
【摘要】 使用 JSON 或者 YAML 记录配置虽然你可以在 python 代码中配置你的日志系统,但是这样并不够灵活。最好的方法是使用一个配置文件来配置。在 Python2.7 及之后的版本中,你可以从字典中加载 logging 配置。这也就意味着你可以从 JSON 或者 YAML 文件中加载日志的配置。尽管你还能用原来 .ini 文件来配置,但是它既很难读也很难写。下面我给你们看一个用 JSON 和

使用 JSON 或者 YAML 记录配置

虽然你可以在 python 代码中配置你的日志系统,但是这样并不够灵活。最好的方法是使用一个配置文件来配置。在 Python2.7 及之后的版本中,你可以从字典中加载 logging 配置。这也就意味着你可以从 JSON 或者 YAML 文件中加载日志的配置。尽管你还能用原来 .ini 文件来配置,但是它既很难读也很难写。下面我给你们看一个用 JSON 和 YAML 文件配置的例子:

logging.json

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

{

    "version": 1,

    "disable_existing_loggers": false,

    "formatters": {

        "simple": {

            "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

        }

    },

    "handlers": {

        "console": {

            "class": "logging.StreamHandler",

            "level": "DEBUG",

            "formatter": "simple",

            "stream": "ext://sys.stdout"

        },

        "info_file_handler": {

            "class": "logging.handlers.RotatingFileHandler",

            "level": "INFO",

            "formatter": "simple",

            "filename": "info.log",

            "maxBytes": 10485760,

            "backupCount": 20,

            "encoding": "utf8"

        },

        "error_file_handler": {

            "class": "logging.handlers.RotatingFileHandler",

            "level": "ERROR",

            "formatter": "simple",

            "filename": "errors.log",

            "maxBytes": 10485760,

            "backupCount": 20,

            "encoding": "utf8"

        }

    },

    "loggers": {

        "my_module": {

            "level": "ERROR",

            "handlers": ["console"],

            "propagate": "no"

        }

    },

    "root": {

        "level": "INFO",

        "handlers": ["console", "info_file_handler", "error_file_handler"]

    }

}

logging.yaml

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

---

version: 1

disable_existing_loggers: False

formatters:

    simple:

        format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

handlers:

    console:

        class: logging.StreamHandler

        level: DEBUG

        formatter: simple

        stream: ext://sys.stdout

    info_file_handler:

        class: logging.handlers.RotatingFileHandler

        level: INFO            

        formatter: simple

        filename: info.log

        maxBytes: 10485760 # 10MB

        backupCount: 20

        encoding: utf8

    error_file_handler:

        class: logging.handlers.RotatingFileHandler

        level: ERROR            

        formatter: simple

        filename: errors.log

        maxBytes: 10485760 # 10MB

        backupCount: 20

        encoding: utf8

loggers:

    my_module:

        level: ERROR

        handlers: [console]

        propagate: no

root:

    level: INFO

    handlers: [console, info_file_handler, error_file_handler]

...

接下来将展示怎样从 JSON 文件中读入日志的配置信息:

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

import json

import logging.config

def setup_logging(

    default_path='logging.json',

    default_level=logging.INFO,

    env_key='LOG_CFG'

):

    """Setup logging configuration

    """

    path = default_path

    value = os.getenv(env_key, None)

    if value:

        path = value

    if os.path.exists(path):

        with open(path, 'rt') as f:

            config = json.load(f)

        logging.config.dictConfig(config)

    else:

        logging.basicConfig(level=default_level)

使用 JSON 的一个优点就是 json是一个标准库,你不需要额外安装它。但是从我个人来说,我比较喜欢 YAML 一些。它无论是读起来还是写起来都比较容易。你也可以使用下面的方法来加载一个 YAML 配置文件:

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

import os

import logging.config

import yaml

def setup_logging(

    default_path='logging.yaml',

    default_level=logging.INFO,

    env_key='LOG_CFG'

):

    """Setup logging configuration

    """

    path = default_path

    value = os.getenv(env_key, None)

    if value:

        path = value

    if os.path.exists(path):

        with open(path, 'rt') as f:

            config = yaml.load(f.read())

        logging.config.dictConfig(config)

    else:

        lo

接下来,你就可以在运行程序的时候调用 setup_logging 来启动日志记录了。它默认会读取 logging.json 或 logging.yaml 文件 。你也可以设置环境变量 LOG_CCFG 从指定路径加载日志配置。例如:

Python

1

LOG_CFG=my_logging.json python my_server.py

如果你喜欢 YAML:

Python

1

LOG_CFG=my_logging.yaml python my_server.py

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。