Skip to content

Commit cb8e4e0

Browse files
committed
更新日志工具类
1 parent 3385464 commit cb8e4e0

2 files changed

Lines changed: 100 additions & 5 deletions

File tree

test/test_log_with_memory_usage.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# encoding: utf-8
22
__author__ = 'zhanghe'
33

4-
4+
import sys
5+
sys.path.append('..')
56
from tools.log import Log
67

78
# 实例化,修改日志文件名称,加载新配置

tools/log.py

Lines changed: 98 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ class Log:
1111
def __init__(self):
1212
self.log_level = logging.DEBUG
1313
self.log_format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'
14-
self.log_datefmt = '%a, %d %b %Y %H:%M:%S'
14+
# self.log_date_fmt = '%a, %d %b %Y %H:%M:%S'
15+
self.log_date_fmt = '%Y-%m-%d %H:%M:%S'
1516
self.log_filename = 'myapp.log'
16-
self.log_filemode = 'w'
17+
self.log_filemode = 'w' # 默认'a'
1718
self.memory_usage = '0.00M'
1819

1920
def log_config(self):
@@ -23,7 +24,7 @@ def log_config(self):
2324
logging.basicConfig(
2425
level=self.log_level,
2526
format=self.log_format,
26-
datefmt=self.log_datefmt,
27+
datefmt=self.log_date_fmt,
2728
filename=self.log_filename,
2829
filemode=self.log_filemode
2930
)
@@ -60,7 +61,79 @@ def warning(msg):
6061
logging.warning(msg)
6162

6263

63-
if __name__ == '__main__':
64+
class Logger:
65+
"""
66+
日志工具类
67+
按照不同等级分别向终端显示和文件写入
68+
"""
69+
def __init__(self, logger_name, logger_filename):
70+
self.logger_name = logger_name
71+
self.logger_filename = logger_filename
72+
self.logger_fmt = '%(asctime)s - %(name)s - %(filename)s - [line:%(lineno)d] - %(levelname)s - %(message)s'
73+
self.logger_date_fmt = '%Y-%m-%d %H:%M:%S'
74+
self.file_handler_level = logging.INFO
75+
self.stream_handler_level = logging.DEBUG
76+
self.memory_usage = '0.00M'
77+
self.logger = logging.getLogger(self.logger_name)
78+
self.set_logger()
79+
80+
def set_logger(self):
81+
"""
82+
配置logger
83+
"""
84+
# 给logger设置相对较低的日志等级(否则小于logger的默认WARNING级别的信息将被忽略,可能会使handler设置无效)
85+
self.logger.setLevel(logging.DEBUG) # 这里输出所有信息,将日志等级控制权限交给handler
86+
# 分别创建两个handler,用于写入日志文件和输出到控制台
87+
file_handler = logging.FileHandler(self.logger_filename)
88+
stream_handler = logging.StreamHandler()
89+
# 给handler设置日志等级
90+
file_handler.setLevel(self.file_handler_level)
91+
stream_handler.setLevel(self.stream_handler_level)
92+
# 定义handler的输出格式formatter
93+
formatter = logging.Formatter(self.logger_fmt, self.logger_date_fmt)
94+
# 设置日志输出格式
95+
file_handler.setFormatter(formatter)
96+
stream_handler.setFormatter(formatter)
97+
# 给logger添加handler
98+
self.logger.addHandler(file_handler)
99+
self.logger.addHandler(stream_handler)
100+
101+
def get_memory_usage(self):
102+
"""
103+
获取当前进程内存使用情况(单位M)
104+
"""
105+
import os
106+
# 获取当前脚本的进程ID
107+
pid = os.getpid()
108+
# 获取当前脚本占用的内存
109+
cmd = 'ps -p %s -o rss=' % pid
110+
output = os.popen(cmd)
111+
result = output.read()
112+
if result == '':
113+
memory_usage_value = 0
114+
else:
115+
memory_usage_value = int(result.strip())
116+
memory_usage_format = memory_usage_value/1024.0
117+
print '内存使用%.2fM' % memory_usage_format
118+
self.memory_usage = '%.2fM' % memory_usage_format
119+
120+
def critical(self, msg):
121+
self.logger.critical(msg)
122+
123+
def error(self, msg):
124+
self.logger.error(msg)
125+
126+
def warning(self, msg):
127+
self.logger.warning(msg)
128+
129+
def info(self, msg):
130+
self.logger.info(msg)
131+
132+
def debug(self, msg):
133+
self.logger.debug(msg)
134+
135+
136+
def test_log():
64137
# 实例化,修改日志文件名称,加载新配置
65138
xxx = Log()
66139
xxx.log_filename = 'myapp2.log'
@@ -70,7 +143,28 @@ def warning(msg):
70143
xxx.info('This is info message')
71144
xxx.warning('This is warning message')
72145

146+
147+
def test_logger():
148+
"""
149+
测试Logger工具类
150+
"""
151+
logger = Logger('my_logger', 'my_app.log')
152+
logger.debug('debug message')
153+
logger.info('info message')
154+
logger.warning('warning message')
155+
logger.error('error message')
156+
logger.critical('critical message')
157+
logger.get_memory_usage()
158+
159+
160+
if __name__ == '__main__':
161+
test_logger()
162+
163+
73164
'''
165+
默认情况下,logging将日志打印到屏幕,日志级别为WARNING;
166+
日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET
167+
74168
logging.basicConfig函数各参数:
75169
filename: 指定日志文件名
76170
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'

0 commit comments

Comments
 (0)