logging模块写日志,网上的帖子大体都在说两种,一种按类型分日志,一种是按时间分日志。
我想要的是:
1.log日志名为自定义变量
2.不同模块访问同一日志文件
1.log日志名为自定义变量
代码如下:
import logging
import logging.handlers
def log1_create(name):
# 1、创建一个logger,如果参数为空则返回root
logger = logging.getLogger(name)
# 2.设置日志级别
logger.setLevel(logging.WARNING)
#3.创建一个 handler,用于写入日志文件
path = "D:\\PythonPrj\\PA63\\Log\\2022_08_10\\"+name
fh = logging.FileHandler(path)
#4.设置日志格式
formatter = logging.Formatter(
fmt="%(asctime)s %(name)s %(filename)s %(message)s",
datefmt="%Y/%m/%d %X"
)
#5.绑定 handler 到 handler和logger对象 上
fh.setFormatter(formatter)
logger.addHandler(fh)
#6、打印输出
logger.warning("-----logcreate--name=%s-----",name)
if __name__ == "__main__":
name="log1.txt"
log1_create(name)
name = "log2.txt"
log1_create(name)
2.不同模块访问同一日志文件
一个项目中,不同的py文件要访问同一个日志文件只要在被调用的py中。
logging.basicConfig即可 main.py
import logging
def CreateLog(name):
print('----CreateLog---------------')
PATH = os.path.abspath('.')
nowdate = time.strftime("%Y_%m_%d", time.localtime())
LogPath = PATH + '\\Log\\'+nowdate
if (not os.path.exists(LogPath)): # 文件夹就创建
os.mkdir(PLogPath)
self.logfile = LogPath + '\\'+name+'.txt'
if(not os.path.exists(logfile)): #如果没有文件创建文件
print("----CreateLog---没有log文件---创建新的----")
open(logfile,'w')
logging.basicConfig(level=logging.WARNING,
filename=self.logfile,
filemode='a',
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
logging.warning('------MAIN------filename=%s----', self.logfile)
if __name__ == "__main__":
name="test"
CreateLog(name)
fun1.py
import logging
logging.basicConfig(level=logging.WARNING,
filename=logfile,
filemode='a',
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
logging.warning('------fun1 生成------filename=%s----',logfile)
fun2.py
import logging
logging.basicConfig(level=logging.WARNING,
filename=logfile,
filemode='a',
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
logging.warning('------fun2 生成------filename=%s----',logfile)