python just函数_python 获取行号,函数名等信息

用于写日志

# -*- coding: utf-8 -*-

"""日志处理

为了兼容现有的print日志, 也采用print,而不是logging,

增加日志级别 error > warn > info > debug

增加日期,行号,函数名,文件名

"""

import sys, os, time

log_level = 0

DEBUG = 0

INFO = 1

WARN = 2

ERROR = 3

NONE = 4

FG_DATETIME = False

FG_LINENO = True

FG_FILENAME = True

FG_FUNCNAME = True

def set_level(level):

"""设置日志级别

log.set_level(log.DEBUG)

"""

global log_level

log_level = level

def set_opt(datetime=True, lineno=True, filename=True, funcnane=True):

"""设置显示参数"""

global FG_DATETIME, FG_LINENO, FG_FILENAME, FG_FUNCNAME

FG_DATETIME = datetime

FG_LINENO = lineno

FG_FILENAME = filename

FG_FUNCNAME = funcnane

def _dolog(*args, **kw):

def tostr(arg):

if isinstance(arg, list):

arg = "[" + ",".join(map(str, arg)) + "]"

elif isinstance(arg, tuple):

arg = "(" + ",".join(map(str, arg)) + ")"

elif isinstance(arg, set):

arg = "{" + ",".join(map(str, arg)) + "}"

elif isinstance(arg, dict):

arg = "{" + ",".join(["%s:%s" % (str(k), str(v)) for k,v in arg.iteritems()]) + "}"

else:

arg = str(arg)

return arg

reparg = " ".join(map(tostr, args))

repkw = ""

if kw:

repkw = " | " + " ".join(["%s=%s" % (str(k), str(v)) for k,v in kw.iteritems()])

repstr = reparg + repkw

return repstr

def debug(*args, **kw):

if log_level > DEBUG: return

prefix = "[D]"

# traceback info

try:

raise Exception

except:

f_tb = sys.exc_info()[2].tb_frame.f_back

t = time.strftime("%Y-%m-%d %X") if FG_DATETIME else ""

name = os.path.basename(f_tb.f_code.co_filename) if FG_FILENAME else ""

funcname = f_tb.f_code.co_name if FG_FUNCNAME else ""

line = str(f_tb.f_lineno) if FG_LINENO else "" # int

tbstr = "[" + ",".join(filter(lambda x:str(x) != "", (t, name, funcname, line))) + "]"

print prefix + tbstr + _dolog(*args, **kw)

def info(*args, **kw):

if log_level > INFO: return

prefix = "[I]"

# traceback info

try:

raise Exception

except:

f_tb = sys.exc_info()[2].tb_frame.f_back

t = time.strftime("%Y-%m-%d %X") if FG_DATETIME else ""

name = os.path.basename(f_tb.f_code.co_filename) if FG_FILENAME else ""

funcname = f_tb.f_code.co_name if FG_FUNCNAME else ""

line = str(f_tb.f_lineno) if FG_LINENO else "" # int

tbstr = "[" + ",".join(filter(lambda x:str(x) != "", (t, name, funcname, line))) + "]"

print prefix + tbstr + _dolog(*args, **kw)

def warn(*args, **kw):

if log_level > WARN: return

prefix = "[W]"

# traceback info

try:

raise Exception

except:

f_tb = sys.exc_info()[2].tb_frame.f_back

t = time.strftime("%Y-%m-%d %X") if FG_DATETIME else ""

name = os.path.basename(f_tb.f_code.co_filename) if FG_FILENAME else ""

funcname = f_tb.f_code.co_name if FG_FUNCNAME else ""

line = str(f_tb.f_lineno) if FG_LINENO else "" # int

tbstr = "[" + ",".join(filter(lambda x:str(x) != "", (t, name, funcname, line))) + "]"

print prefix + tbstr + _dolog(*args, **kw)

def error(*args, **kw):

if log_level > ERROR: return

prefix = "[E]"

# traceback info

try:

raise Exception

except:

f_tb = sys.exc_info()[2].tb_frame.f_back

t = time.strftime("%Y-%m-%d %X") if FG_DATETIME else ""

name = os.path.basename(f_tb.f_code.co_filename) if FG_FILENAME else ""

funcname = f_tb.f_code.co_name if FG_FUNCNAME else ""

line = str(f_tb.f_lineno) if FG_LINENO else "" # int

tbstr = "[" + ",".join(filter(lambda x:str(x) != "", (t, name, funcname, line))) + "]"

print prefix + tbstr + _dolog(*args, **kw)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值