‘壹’ python log日志怎么写 案例
python中,logging模块主要是处理日志的。
所谓日志,可理解为在软件运行过程中,所记录的的一些运行情况信息
软件开发人员可以根据自己的需求添加日志,日志可以帮助软件开发人员
了解软件的运行信息,对软件的维护尤为重要。
‘贰’ python 怎么用log函数
import sys
funcName = sys._getframe().f_back.f_code.co_name #获取调用函数名
lineNumber = sys._getframe().f_back.f_lineno #获取行号
print sys._getframe().f_code.co_name # 获取当前函数名
‘叁’ python里怎模对复数取对数log,对矩阵实现log以3为底,怎么做
#coding=utf-8
importmath
importnumpyasnp
#复数
aComplex=4.23+8.5j
#对复数的实数部分取对数
math.log(aComplex.real)
#对复数的虚数部分取对数
math.log(aComplex.imag)
#矩阵
aArray=np.array([1.0,2.0,3.0])
#对矩阵求log以3为底
foriinrange(len(aArray)):
aArray[i]=math.log(aArray[i],3)
‘肆’ python 多线程logger问题
因为logging是threadsafe的,但不是process-safe(应该没有这个词儿,只是为了便于理解)的。这段代码就是多个进程共同操作一个日志文件。这种情况下,logging的行为就很难说了。
我测试了一下,日志中大概几百行。而且,可以看到一些顺序错乱现象:
Fri, 08 Aug 2014 01:19:38 logging_in_multithread.py[line:40] theadWorking ERROR 2
FFri, 08 Aug 2014 01:19:36 logging_in_multithread.py[line:40] theadWorking ERROR 11(注意这里的FFri)
把代码这样改:
fornuminrange(processNum):
p=Process(target=processWorking,args=('2',))
processs.append(p)
p.start()
p.join()
还有其他方法,比如:为logging实现一个FileHandler,以使logging在multiple process的环境下也能正常工作。这是我从网上了解到的做法,自己还没实践过。
Python Manual中logging Cookbook中有这么一段话:
Logging to a single file from multiple processes
Although logging is thread-safe, and logging to a single file from multiple threads in a single process is supported, logging to a single file from multiple processes is not supported, because there is no standard way to serialize access to a single file across multiple processes in Python. If you need to log to a single file from multiple processes, one way of doing this is to have all the processes log to a SocketHandler, and have a separate process which implements a socket server which reads from the socket and logs to file. (If you prefer, you can dedicate one thread in one of the existing processes to perform this function.)
这段话中也提出了另外一种解决方案。
‘伍’ Python日志模块介绍
logging 模块预定义了5种日志级别,并根据它们所跟踪的事件的级别或严重程度来命名,具体如下:
注意:
Logger 对象有三个功能:
Logger 对象的使用最广泛的方法主要是:配置和记录消息
当配置了 Logger 对象后,就可以使用 Logger.debug() , Logger.info() , Logger.warning , Logger.error , Logger.critical() 方法来创建日志消息,只需将需要记录的消息写进括号内即可
Handler 对象负责将日志消息(基于日志消息的严重性)分派给处理器的指定目标。在上一步中提到,可以使用 Logger.addHandler() 来添加零个或多个处理器对象。例如,算法可以将所有日志消息都发送到控制台,将 ERROR 或者更高级别的消息发送到磁盘文件。这就需要两个单独的处理器。
处理器有很多 种类 ,常用的主要有以下几种:
Formatter 对象是用来配置日志消息的最终输出形式。其格式由 %(<dictionary key>)s 这样的表达形式来组合成字符串。例如:
其中,可以设置的<dictionary key>可参考 LogRecord属性
配置完后,我们就可以在我们算法想要进行日志记录的地方调用 Logger.debug() , Logger.info() , Logger.warning , Logger.error , Logger.critical() 来进行日志输出了。比如:
当运行算法时,你会看到控制台输出以下内容
https://docs.python.org/3/howto/logging.html#logging-howto
‘陆’ 多进程环境python logging打印日志混乱问题
解决办法如下:
多么痛的领悟,滑腔困扰了这么久的问题其实就是一个参数配置错了。
fileMode:表示日志山让侍文件的打开方式。w-直接写,使用这个配置当系统重启的时候日志会清空,一个进程打开后其他进程是无法使用的;a-尾部逗吵追加,大家都可以打开往文件结尾进行追加写入。
本人主语言是java,转到python后日志这块踩了几个坑。再说说另外一个坑,就是异常堆栈的打印问题,在java中logger是可以使用error直接打印出来的。在python中error跟其他日志记录方法没太大差别,是无法打印异常堆栈的,打印堆栈请使用 logger.exception("异常说明", e) 。
‘柒’ python dataframe 求对数
log()方法返回x的自然对数,对于x>0。
语法
以下是log()方法的语法:
import
math
math.log(
x
)
注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数。
参数
x
--
这是一个数值表达式。
返回值
此方法返回x的自然对数,对于x>0。
例子
下面的例子显示了log()方法的用法。
#!/usr/bin/python
import
math
#
This
will
import
math
mole
print
"math.log(100.12)
:
",
math.log(100.12)
print
"math.log(100.72)
:
",
math.log(100.72)
print
"math.log(119L)
:
",
math.log(119L)
print
"math.log(math.pi)
:
",
math.log(math.pi)
当我们运行上面的程序,它会产生以下结果:
math.log(100.12)
:
4.60636946656
math.log(100.72)
:
4.61234438974
math.log(119L)
:
4.77912349311
math.log(math.pi)
:
1.14472988585