程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

如何优雅的生成日志?!

hfteth 2025-01-21 17:54:42 技术文章 18 ℃

一个项目从开发到完成需要的时间远远没有后期调试、修改BUG的时间长,而如何填埋我们自己挖的坑,就需要套完整健壮的日志系统。python自带的日志处理模块很不错,但是有些需求无法满足,于是决定根据从前辈实例,自己重写一个日志处理,逻辑和代码都很简单。

直接上代码:

log.py 日志文件

import os, time

import threading

log_dir = "/logdir/"

mutex = threading.Lock()

if not os.path.isdir(log_dir ):

os.system('mkdir -p %s' % log_dir )

# 定义日志函数

def send_log(level,message):

logdir = os.path.join(log_dir,level,time.strftime('%Y/%m/', ))

if not os.path.isdir(logdir):

os.system('mkdir -p %s' % logdir)

file_path = os.path.join(logdir,time.strftime('%d', ))

mutex.acquire()

f = open(file_path, 'a+')

f.write(time.asctime() + '\t' + str(message) + '\n')

f.close()

if os.path.getsize(file_path) >= 10485760:

os.rename(file_path,file_path+"_"+time.strftime("%Y%m%d%H%M%S"))

mutex.release()

下面是编辑器效果:

prodect.py项目文件

from log import send_log

try:# info日志

send_log("info","用户登录成功")

except:

pass

try:# error日志

send_log("error","用户登录成功")

except:

pass

总结

log.py文件中,定义了日志文件夹的路径,如果发生日志,会在文件中创建如下的树形结构:

如果日志文件超过10M会将日志重新命名,之后重新生成新的日志文件,这样能保证日志不会因为太大导致的打开困难,mutex 线程锁保证日志输出。

prodect.py文件中调用send_log函数,调用时传递两个参数,一个是日志级别,一个是日志内容,try:except保证日志系统错误不会影响正常项目访问。

日志在生成过程中会根据日志的级别进行目录归类,保证后续方便的查找日志。

找日志可以直接定位到想要去的日子,找到想要看到的日志。

谢谢大家,欢迎订阅我的头条号。

Tags:

最近发表
标签列表