天气与日历 切换到窄版

 找回密码
 立即注册

QQ登录

只需一步,快速开始

限时开通VIP永久会员,可免费下载所有附件
查看: 344|回复: 0

[Python教程] django实现日志按日期分割

[复制链接]

3188

主题

4

回帖

3290

积分

管理员

积分
3290
发表于 2024-2-26 10:03:00 | 显示全部楼层 |阅读模式

django实现日志按日期分割
这篇文章主要介绍了django实现日志按日期分割,具有很好的参考价值,希望对大家有所帮助。


settings文件中配置:
  • #下面就是logging的配置
  • LOGGING = {
  •     'version': 1,  # 指明dictConnfig的版本,目前就只有一个版本,哈哈
  •     'disable_existing_loggers': False,  # 表示是否禁用所有的已经存在的日志配置
  •     'formatters': {  # 格式器
  •         'verbose': {  # 详细
  •             'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
  •         },
  •         'standard': {  # 标准
  •             'format': '[%(asctime)s] [%(levelname)s] %(message)s'
  •         },
  •     },
  •     # handlers:用来定义具体处理日志的方式,可以定义多种,"default"就是默认方式,"console"就是打印到控制台方式。file是写入到文件的方式,注意使用的class不同
  •     'handlers': { # 处理器,在这里定义了两个个处理器
  •         'console': {
  •             'level': 'DEBUG',
  •             'class': 'logging.StreamHandler',
  •             'stream': 'ext://sys.stdout',   # 文件重定向的配置,将打印到控制台的信息都重定向出去 python manage.py runserver >> /home/aea/log/test.log
  •             # 'stream': open('/home/aea/log/test.log','a'),  #虽然成功了,但是并没有将所有内容全部写入文件,目前还不清楚为什么
  •             'formatter': 'standard'   # 制定输出的格式,注意 在上面的formatters配置里面选择一个,否则会报错
  •         },
  •         'file': {
  •             'level': 'DEBUG',
  •             'class': 'logging.handlers.TimedRotatingFileHandler',   #'logging.FileHandler',
  •             'filename': 'logs/blog.log',  #这是将普通日志写入到日志文件中的方法,
  •             'formatter':'verbose',  #standard
  •             # 每分钟切割一次日志
  •             # 'when':'M',
  •             # 目前设定每天一个日志文件
  •             'when': 'midnight',
  •             # 时间间隔
  •             'interval':1,
  •             # 保留5份日志
  •             'backupCount':100,
  •             'encoding':'utf-8'
  •         },
  •         'default': {
  •             'level':'DEBUG',
  •             'class':'logging.handlers.RotatingFileHandler',
  •             'filename': './all.log',     #日志输出文件
  •             'maxBytes': 1024*1024*5,                  #文件大小
  •             'backupCount': 5,                         #备份份数
  •             'formatter':'standard',                   #使用哪种formatters日志格式
  •         },
  •         # 上面两种写入日志的方法是有区别的,前者是将控制台下输出的内容全部写入到文件中,这样做的好处就是我们在views代码中的所有print也会写在对应的位置
  •         # 第二种方法就是将系统内定的内容写入到文件,具体就是请求的地址、错误信息等,小伙伴也可以都使用一下然后查看两个文件的异同。
  •     },
  •     'loggers': {  # log记录器,配置之后就会对应的输出日志
  •         # django 表示就是django本身默认的控制台输出,就是原本在控制台里面输出的内容,在这里的handlers里的file表示写入到上面配置的file-/home/aea/log/jwt_test.log文件里面
  •         # 在这里的handlers里的console表示写入到上面配置的console-/home/aea/log/test.log文件里面
  •         'django': {
  •             'handlers': ['console','file'],
  •             # 这里直接输出到控制台只是请求的路由等系统console,当使用重定向之后会把所有内容输出到log日志
  •             'level': 'DEBUG',
  •             'propagate': True,
  •         },
  •         'django.request ':{
  •             'handlers': ['console','file'],
  •             'level': 'WARNING',  # 配合上面的将警告log写入到另外一个文件
  •             'propagate': True,
  •         },
  •         'django.db.backends': {
  •             'handlers': ['file'], # 指定file handler处理器,表示只写入到文件
  •             'level':'DEBUG',
  •             'propagate': True,
  •         },
  •     },
  • }

[color=rgb(51, 102, 153) !important]复制代码

项目启动时,win系统下,添加 --noreload :python manage.py runserver --noreload ,防止PermissionError报错;

pycharm使用时,在此添加参数





补充知识:logback输出日志:时间分割(每天生成相同名称的log文件,旧文件以时间分类)

private final static Logger logger = LoggerFactory.getLogger(SyncIntegralService.class);

今天又提出了一个奇怪的需求,很是蛋疼,就是:每天生成相同名称的log文件,旧文件以时间分类

只有一个"log.log"的文件,7日(今天)生成的日志是以 “log.log”的形式存储的,当到8日(明天)的时候是把7日生成的log.log文件保存到log.log201400707.log,然后在创建一个8日的log.log文件,依次类推。

现在很清晰是什么需求了吧,先贴项目之前的logback文件

  • <?xml version="1.0" encoding="UTF-8"?>
  • <configuration>
  • <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  • <encoder>
  •   <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
  •   </pattern>
  • </encoder>
  • </appender>
  • <appender name="eventFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  • <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  •   <fileNamePattern>${catalina.base}/logs/EventAnalysis/EventAnalysis.%d{yyyy-MM-dd}.log</fileNamePattern>
  •   <maxHistory>30</maxHistory>
  • </rollingPolicy>
  • <encoder>
  •   <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  • </encoder>
  • </appender>
  • <logger name="com.travelsky.eventanalysis.dao" additivity="true">
  • <level value="DEBUG" />
  • </logger>
  • <root level="info">
  • <appender-ref ref="eventFile" />
  • <appender-ref ref="STDOUT"/>
  • </root>
  • </configuration>

[color=rgb(51, 102, 153) !important]复制代码

仔细看看还是很简单的,就是每天生成文件以时间分类,输出级别是debug,还有输出形式等。。具体是这样的



好了,现在贴上需求大代码

  • <?xml version="1.0" encoding="UTF-8"?>
  • <configuration>
  • <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  • <encoder>
  •   <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
  •   </pattern>
  • </encoder>
  • </appender>
  • <!-- 日志生成位置 -->
  • <appender name="eventFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  •   <File>${catalina.base}/logs/BigeyeCenter/BigeyeCenter.log</File>
  •   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  •    <!-- daily rollover 保存历史记录到这个文件夹一日起为后缀 -->
  •    <FileNamePattern>${catalina.base}/logs/BigeyeCenter/BigeyeCenter.%d{yyyy-MM-dd}.log</FileNamePattern>
  •    <!-- keep 30 days' worth of history -->
  •    <maxHistory>30</maxHistory>
  •   </rollingPolicy>
  •   <encoder>
  •    <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
  •    <charset>UTF-8</charset> <!-- 此处设置字符集 -->
  •   </encoder>
  • </appender>
  • <logger name="com.travelsky.updateDatabase.dao" additivity="true">
  • <level value="DEBUG" />
  • </logger>
  • <!-- 打印 日志级别-->
  • <root level="info">
  • <appender-ref ref="eventFile" />
  • <appender-ref ref="STDOUT"/>
  • </root>
  • </configuration>

[color=rgb(51, 102, 153) !important]复制代码

呵呵,其实就是加上了一行代码,这就浪费了一天的时间。。。,其实刚开始想写一个文件的覆盖,用java代码控制。后来才发现资源一直被占用,因为tomcat一直在占用相同的log文件,这里就不贴码了

看一下效果






看一下修改日期和生成日期你就看懂了。。。




相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员5折;永久VIP免费
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
快速回复 返回顶部 返回列表