The actual use debug logging module description

<ignore_js_op>
start.py :

[Python]  plain text view  Copy the code
?
01
02
03
04
05
06
07
08
09
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
import sys,os                                   #应该把项目的根目录添加到环境变量中
BASE_DIR = os.path.dirname(os.path.dirname(__file__) #os.path.dirname(__file__) 获取当前文件上一级路径名
sys.path.append(BASE_DIR)                       #拿到ATM所在的文件夹
from core import src
src.run()
sys.path.append(r 'D:\code\SH_fullstack_s1\day15\ATM' ) 添加的是绝对路径,不支持移植到别的硬件上运行
 
src.py :
 
from conf import settings
from lib import common
logger1 = common.get_logger( 'atm' )
def login():
     print ( '登录....' )
     with open (settings.DB_PATH,encoding = 'utf-8' ) as f:
         for line in f:
             print (line)
def register():
     print ( '注册....' )
def shop():
     print ( '购物....' )
def pay():
     print ( '支付...' )
def transter():
     print ( '转账...' )
     common.logger( 'xxxx给他爹xx转账10000' )
     logger1.debug( 'xxxx给他爹xx转账10000' )
     logger1.error( 'xxxx给他爹xx转账10000,转账失败' )
def run():
     while True :
         print ( """
         1 登录
         2 注册
         3 购物
         4 支付
         5 转账
         """ )
         choice = input ( '>>: ' ).strip()
         if choice = = '1' :
             login()
         elif choice = = '2' :
             register()
         elif choice = = '3' :
             shop()
         elif choice = = '4' :
             pay()
         elif choice = = '5' :
             transter()
         else :
             print ( '输入错误指令' )


settings.py:

[Python]  plain text view  Copy the code
?
1
2
3
DB_PATH = r 'D:\code\SH_fullstack_s1\day15\ATM\db\db.txt' #自定义设置的文件路径
LOG_PATH = r 'D:\code\SH_fullstack_s1\day15\ATM\log\access.log'
LOGGING_DIC = {.....}               #log配置字典


common.py :

[Python]  plain text view  Copy the code
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
from conf import settings
def logger(msg):
     with open (settings.LOG_PATH, 'a' ,encoding = 'utf-8' ) as f:
         f.write( '%s\n' % msg)
         
import logging.config
import logging
from conf import settings
def get_logger(name): #name='atm'
     logging.config.dictConfig(settings.LOGGING_DIC)  # 导入上面定义的logging配置
     l1 = logging.getLogger(name)
     return l1


logging module

[Python]  plain text view  Copy the code
?
01
02
03
04
05
06
07
08
09
10
11
12
import logging
logging.basicConfig(      #为logging模板指定全局配置,针对所有logger有效,控制打印到文件中
filename = 'access.log' ,          # /stream=sys.stdout 打印在屏幕上,但和filename只能存在其一
format = '%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s' ,
datefmt = '%Y-%m-%d %H:%M:%S %p' ,
level = 40
)
logging.debug( 'debug...' ) # 10
logging.info( 'info....' ) #20
logging.warning( '.....' ) #30
logging.error( '......' ) # 40
logging.critical( '.....' ) #50

 

[Python]  pure
?
 
 
 
01
02
03
04
05
06
07
08
09
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
6.51 logging模块的四类对象
logger:负责产生日志
 
logger1 = logging.getLogger( 'xxx' )
filter :过滤日志(不常用)
 
handler:控制日志打印到文件 or 终端
 
fh1 = logging.FileHandler(filename = 'a1.log' ,encoding = 'utf-8' )
fh2 = logging.FileHandler(filename = 'a2.log' ,encoding = 'utf-8' )
sh = logging.StreamHandler()
formatter:控制日志的格式
 
formatter1 = logging.Formatter(
fmt = '%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s' ,
datefmt = '%Y-%m-%d %H:%M:%S %p' ,
)
formatter2 = logging.Formatter(fmt = '%(asctime)s - %(message)s' ,)
logger - - - - >多个 file handler < - - - - 多个formatter
 
绑定关系:
 
1. 为logger1对象绑定handler:
 
logger1.addHandler(fh1)
logger1.addHandler(fh2)
logger1.addHandler(sh)
2. 为handler对象绑定日志格式
 
fh1.setFormatter(formatter1)
fh2.setFormatter(formatter1)
sh.setFormatter(formatter2)
设定日志级别: 两层关卡,必须都通过,日志才能正常记录
 
logger1.setLevel( 10 )
fh1.setLevel( 10 )
fh2.setLevel( 10 )
sh.setLevel( 10 )
#调用logger1对象下的方法,产生日志,然后交给不同的handler,控制日志记录到不同的地方
logger1.debug( '调试信息' )   #调用logger1,产生日志
日志的继承
 
import logging
logger1 = logging.getLogger( 'xxx' )
logger2 = logging.getLogger( 'xxx.son' )
logger3 = logging.getLogger( 'xxx.son.grandson' )
sh = logging.StreamHandler()
formatter2 = logging.Formatter(fmt = '%(asctime)s - %(message)s' ,)
sh.setFormatter(formatter2)
logger1.addHandler(sh)
logger2.addHandler(sh)
logger3.addHandler(sh)
logger1.setLevel( 10 )
logger2.setLevel( 10 )
logger3.setLevel( 10 )
sh.setLevel( 10 )
logger1.debug( '测试。。。。' )
logger2.debug( '测试。。。。' )
logger3.debug( '测试。。。。' )
更多技术资讯可关注:gzitcast

Guess you like

Origin www.cnblogs.com/heimaguangzhou/p/11796375.html