lesson06datetime与logging
#视频1--程序连接redis
虚拟环境中安装
ls -a ,virtualenvs //环境位置
23分钟-06程序连接redis.py:
#1,python -m pip install --upgrade pip==9.0.3 //给 pip 降级
#2,在pycahrm-setting--安装redis--install packages
#3,查看linux--workon py3env --pip list --中有redis库
1 import redis #程序用来操作redis的库 2 3 r = redis.Redis(db=1,decode_responses=True) 4 5 r.mset({'name':'juhao','name2':'dsad','name3':'daszzz'}) 6 7 result = r.mget('name','name2','name3') 8 print(result)
#运行:
['juhao', 'dsad', 'daszzz']
-----------------------------------------
#视频2-logging模块
debug
info
warning
error
critical
- **日志的作用**
- 通过记录和分析日志可以了解一个系统或软件程序运行情况是否正常,也可以在应用程序出现故障时快速定位问题,
做运维的同学,在接收到报警或各种问题反馈后,进行问题排查时通常都会先去看各种日志,
大部分问题都可以在日志中找到答案。开发的同学,可以通过IDE控制台上输出的各种日志进行程序调试。
- **程序调试**
- **软件程序运行故障分析与问题定位**
- > 开发应用程序或部署开发环境时,可以使用DEBUG或INFO级别的日志获取尽可能详细的日志信息来进行开发或部署调试;
应用上线或部署生产环境时,应该使用WARNING或ERROR或CRITICAL级别的日志来降低机器的I/O压力和提高获取错误日志信息的效率。
日志级别的指定通常都是在应用程序的配置文件中进行指定的。
设置本地解释器
19分钟:ssh远程log在linx/tmp里, //tools,,同步文件位置
14分钟-代码db.py
//记录信息格式(等级,行数,错误文本,时间),
datetime和log.md
模块化组件-代码:
#06日志mylog2.py:
1 import logging 2 3 # 第一步,创建一个logger 4 logger = logging.getLogger('%s_log' % __name__) 5 logger.setLevel(logging.INFO) #设定日志等级 6 7 # 第二步,创建一个handler,用于写入日志文件 8 fh = logging.FileHandler('test1.log', mode='a') 9 fh.setLevel(logging.WARNING) 10 11 #输出到控制台 12 ch = logging.StreamHandler() 13 ch.setLevel(logging.WARNING) 14 15 # 第三步,定义handler的输出格式 16 #(时间,文件名,出错行数, 等级, 内容) 17 formatter = logging.Formatter("%(asctime)s - %(filename)s [line: %(lineno)d] - %(levelname)s: %(message)s") #第二个参数时间格式话 18 fh.setFormatter(formatter) 19 ch.setFormatter(formatter) 20 21 22 #第四步,将对应的hangler添加在logger对象中 23 logger.addHandler(fh) 24 logger.addHandler(ch) 25 26 27 28 try: 29 with open('test.txt', 'r') as f: 30 print(f.read()) 31 except FileNotFoundError as e: 32 print(e) 33 #logger.error("No such file or directory: 'test.txt'") 34 logger.error('No such file or directory----')
#运行:
ssh://[email protected]:1234/home/pyvip/.virtualenvs/py3env/bin/python3 -u /home/pyvip/20180606py_case/进阶/06日志mylog2.py
[Errno 2] No such file or directory: 'test.txt'
2020-05-16 13:50:41,749 - 06日志mylog2.py [line: 34] - ERROR: No such file or directory----
//查看在linux--/home/pyvip/20180606py_case/进阶-----test1.log中:
pyvip@Vip:~/20180606py_case/进阶$ cat test1.log
2019-04-01 22:36:51,777 - 06日志mylog2.py [line: 34] - ERROR: No such file or directory
2020-05-15 20:40:16,246 - 06日志mylog2.py [line: 34] - ERROR: No such file or directory----
2020-05-16 13:50:41,749 - 06日志mylog2.py [line: 34] - ERROR: No such file or directory----
-----------------------------------------------------------------
#视频3-datetime模块-日期和时间
06datetime模块3.py:
1 import datetime 2 3 t=datetime.date(year=2018, month=7, day=17) #三个参数一个不能少 4 d=datetime.time(hour=20, minute=30, second=10) #少了用0代替 5 dt=datetime.datetime(2018,7,17,20,30,10) 6 7 print(t) 8 print(d) 9 print(dt)
#运行:
2018-07-17
20:30:10
2018-07-17 20:30:10
-----------------------------------------------
#例子2,datetime类其实是可以看做是date类和time类的合体
1 from datetime import datetime 2 3 a = datetime.now() #获取日期 4 datetime.utcnow() #获取utc时间 5 6 print(a) 7 print(a.date()) #返回日期 8 print(a.time()) #返回时间 9 print(a.utctimetuple()) #返回UTC时间元组
#运行:
2020-05-16 13:53:33.758365
2020-05-16
13:53:33.758365
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=16, tm_hour=13, tm_min=53, tm_sec=33, tm_wday=5, tm_yday=137, tm_isdst=0)
-----------------------------------------------
#3,时间对象与时间戳转化
1 from datetime import datetime 2 3 #datetime(日期) ->timestamp(时间戳) 4 #时间对象.timestamp() 5 now = datetime.now() 6 temp = now.timestamp() 7 print(temp) 8 9 #timestamp(时间戳) -> datetime(日期) 10 result =datetime.fromtimestamp(temp) 11 print(result)
#运行:
1589608475.170751
2020-05-16 13:54:35.17075
----------------------------------------------------------------
#4,时间日期与字符串的转化
1 from datetime import datetime 2 3 #将格式字符串转换为datetime对象, string->datetime 4 result=datetime.strptime('2018-3-22 15:28:18','%Y-%m-%d %H:%M:%S') 5 print(result) 6 7 #datetime->string 显示给用户 8 now = datetime.now() 9 strtime= now.strftime("%Y-%m-%d %H:%M:%S") #可以去掉几个 10 strtime1 =now.strftime('%w') #这周第几天 11 strtime2 =now.strftime('%j') #今年多少天 12 strtime3 =now.strftime('%U') #今年多少周 13 abc='{}--{}-{}-{}'.format(strtime,strtime1,strtime2,strtime3) 14 15 print(abc)
#运行:
2018-03-22 15:28:18
2020-05-16 13:55:19--6-137-19
#5,时间计算-timedelta
#datetime.timedelta( days=0,seconds=0, microseconds=0 milliseconds=0,minutes=0, hours=0, weeks=0 )
1 #5,时间计算-timedelta 2 #datetime.timedelta( days=0,seconds=0, microseconds=0 milliseconds=0,minutes=0, hours=0, weeks=0 ) 3 from datetime import datetime, timedelta 4 5 now = datetime.now().date() 6 result = now + timedelta(days=1) 7 print(result.strftime("%d")) #获得明天的日期 8 9 result = now - timedelta(days=3) 10 print(result.strftime("%d")) #获得三天前的日期 11 12 now = datetime.now() 13 print(now + timedelta(hours=-2, minutes=30)) #获得前2.5小时的时间
#运行:
17
13
2020-05-16 12:26:23.7839