Django实现文件上传、文件列表查看、修改、限流和日志记录8
Django实现文件上传、文件列表查看、修改、限流和日志记录8
本章节,总结一些部署项目遇到的报错,希望会有所帮助
NameError: name 'datetime' is not defined
报错“logging.info('用户 {} 在 {} 登录成功'.format(username, datetime.now())) NameError: name 'datetime' is not defined”
#报错原因为忘记导入datetime模块。请在file_upload_app/views.py文件中添加以下导入语句:
from datetime import datetime #在user_login视图函数中使用datetime.now()来获取当前时间,并将其添加到日志消息中 logging.info('用户 {} 在 {} 登录成功'.format(username, datetime.now())) logging.info('用户 {} 在 {} 查看文件内容'.format(request.user.username, datetime.now()))
中文乱码问题
乱码日志为:
logging.error('�û� {} �� {} �鿴�ļ�����ʧ��'.format(datetime.now()))
在FileHandler的构造函数中添加了encoding='utf-8'参数,以指定日志文件的编码为UTF-8 file_handler = logging.FileHandler('app.log', encoding='utf-8') #最终解决 logging.basicConfig( level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', handlers=[ logging.FileHandler('app.log', encoding='utf-8'), logging.StreamHandler() #将日志同时输出到文件和控制台 # logging.StreamHandler(sys.stdout) # 将日志消息输出到控制台 ] )
IndexError: Replacement index 1 out of range for positional args tuple
报错: logging.info('用户 {} 在 {} 文件修改失败'.format(datetime.now())) IndexError: Replacement index 1 out of range for positional args tuple
#在格式化日志消息时,需要确保格式化字符串中的占位符与传递给format()方法的参数数量匹配。 #提供的代码示例中,format()方法的参数数量不足,导致了IndexError异常。 #为了修复这个问题,你可以将日志消息的格式化字符串中的占位符数量与format()方法的参数数量保持一致 #使用format()方法的参数数量与日志消息格式化字符串中的占位符数量保持一致,确保不会出现IndexError异常。 #请注意,如果你在其他地方也使用了类似的日志消息格式化代码,请确保在整个代码中都进行了修正。 #错误定义 logging.info('用户 {} 在 {} 文件修改失败'.format(datetime.now())) #修改定义为 logging.info('用户 {} 在 {} 登录成功'.format(username, datetime.now())) #将datetime.now()作为参数传递给format()方法,以匹配日志消息中的占位符数量。 #使用request.user.username来获取当前登录用户的用户名,并将其添加到日志消息中。 #请注意,为了获取当前登录用户的用户名,你需要确保用户已经通过认证并登录 logging.info('用户 {} 在 {} 查看文件内容'.format(request.user.username, datetime.now()))
日志在控制台输出不在日志文件输出
日志消息只在控制台输出而不在日志文件中输出,可能有以下几个原因:
- 检查文件路径:请确保日志文件的路径是正确的,并且Django应用程序有权限写入该文件所在的目录。你可以尝试使用绝对路径来指定日志文件的路径,如/path/to/your/app.log。
- 检查日志级别:请确保日志级别设置为logging.INFO或更高级别,以确保所有日志消息都会被记录。如果将日志级别设置为logging.DEBUG,则只会记录更详细的调试信息。
- 检查日志记录器:请确保你的代码中的日志记录器与basicConfig中的日志记录器是同一个。在你的代码示例中,你创建了一个名为logger的日志记录器,并将其级别设置为logging.INFO。确保在记录日志消息时使用相同的日志记录器,如logger.info('日志消息')。
- 检查日志消息的级别:请确保你在记录日志消息时使用的日志级别高于或等于logging.INFO,以确保消息会被记录。如果你使用了低于logging.INFO级别的日志级别,例如logging.DEBUG,则消息可能不会被记录到日志文件中。
此外,还遇到很多报错,没来得及记录,通过检查代码、百度Google排查报错处理。整个的排查思路就是根据新增功能带来的影响进行排查处理,基本上原因有以下几点:
1、代码编写不规范
2、缺少导入模块
3、没定义调用的模块
4、引用模块失败
5、代码逻辑编写问题
在添加功能的时候,一次增加一个功能然后及时的验证避免太多功能带来连锁反应增加排查的难度,刚学习Django项目应该先实现自己所需的功能,在一点点添加完善优化。
文件上传没有报错目录下无上传文件
选择文件后提交,日志响应成功,但是服务器目录下没有文件,就感觉很奇怪。
检查以下几个方面解决问题:
1、秘钥文件路径是否正确
2、sftp.putfo后面的上传路径是否正确
3、秘钥是否有权限
4、检查模版定义和视图是否对应,我这里是定义获取的file在模版里面指定了myfile,修改后可以上传查看修改