依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

django实现日志按日期分割

[复制链接] |主动推送

1686

主题

1721

帖子

2378

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2378
发表于 2022-10-29 17:33:35 | 显示全部楼层 |阅读模式
django实现日志按日期分割
这篇文章主要介绍了django实现日志按日期分割,具有很好的参考价值,希望对大家有所帮助。


settings文件中配置:
  1. #下面就是logging的配置
  2. LOGGING = {
  3.     'version': 1,  # 指明dictConnfig的版本,目前就只有一个版本,哈哈
  4.     'disable_existing_loggers': False,  # 表示是否禁用所有的已经存在的日志配置
  5.     'formatters': {  # 格式器
  6.         'verbose': {  # 详细
  7.             'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
  8.         },
  9.         'standard': {  # 标准
  10.             'format': '[%(asctime)s] [%(levelname)s] %(message)s'
  11.         },
  12.     },
  13.     # handlers:用来定义具体处理日志的方式,可以定义多种,"default"就是默认方式,"console"就是打印到控制台方式。file是写入到文件的方式,注意使用的class不同
  14.     'handlers': { # 处理器,在这里定义了两个个处理器
  15.         'console': {
  16.             'level': 'DEBUG',
  17.             'class': 'logging.StreamHandler',
  18.             'stream': 'ext://sys.stdout',   # 文件重定向的配置,将打印到控制台的信息都重定向出去 python manage.py runserver >> /home/aea/log/test.log
  19.             # 'stream': open('/home/aea/log/test.log','a'),  #虽然成功了,但是并没有将所有内容全部写入文件,目前还不清楚为什么
  20.             'formatter': 'standard'   # 制定输出的格式,注意 在上面的formatters配置里面选择一个,否则会报错
  21.         },
  22.         'file': {
  23.             'level': 'DEBUG',
  24.             'class': 'logging.handlers.TimedRotatingFileHandler',   #'logging.FileHandler',
  25.             'filename': 'logs/blog.log',  #这是将普通日志写入到日志文件中的方法,
  26.             'formatter':'verbose',  #standard
  27.             # 每分钟切割一次日志
  28.             # 'when':'M',
  29.             # 目前设定每天一个日志文件
  30.             'when': 'midnight',
  31.             # 时间间隔
  32.             'interval':1,
  33.             # 保留5份日志
  34.             'backupCount':100,
  35.             'encoding':'utf-8'
  36.         },
  37.         'default': {
  38.             'level':'DEBUG',
  39.             'class':'logging.handlers.RotatingFileHandler',
  40.             'filename': './all.log',     #日志输出文件
  41.             'maxBytes': 1024*1024*5,                  #文件大小
  42.             'backupCount': 5,                         #备份份数
  43.             'formatter':'standard',                   #使用哪种formatters日志格式
  44.         },
  45.         # 上面两种写入日志的方法是有区别的,前者是将控制台下输出的内容全部写入到文件中,这样做的好处就是我们在views代码中的所有print也会写在对应的位置
  46.         # 第二种方法就是将系统内定的内容写入到文件,具体就是请求的地址、错误信息等,小伙伴也可以都使用一下然后查看两个文件的异同。
  47.     },
  48.     'loggers': {  # log记录器,配置之后就会对应的输出日志
  49.         # django 表示就是django本身默认的控制台输出,就是原本在控制台里面输出的内容,在这里的handlers里的file表示写入到上面配置的file-/home/aea/log/jwt_test.log文件里面
  50.         # 在这里的handlers里的console表示写入到上面配置的console-/home/aea/log/test.log文件里面
  51.         'django': {
  52.             'handlers': ['console','file'],
  53.             # 这里直接输出到控制台只是请求的路由等系统console,当使用重定向之后会把所有内容输出到log日志
  54.             'level': 'DEBUG',
  55.             'propagate': True,
  56.         },
  57.         'django.request ':{
  58.             'handlers': ['console','file'],
  59.             'level': 'WARNING',  # 配合上面的将警告log写入到另外一个文件
  60.             'propagate': True,
  61.         },
  62.         'django.db.backends': {
  63.             'handlers': ['file'], # 指定file handler处理器,表示只写入到文件
  64.             'level':'DEBUG',
  65.             'propagate': True,
  66.         },
  67.     },
  68. }
复制代码

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

pycharm使用时,在此添加参数

20200521092957.jpg




补充知识: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文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  4. <encoder>
  5.   <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
  6.   </pattern>
  7. </encoder>
  8. </appender>

  9. <appender name="eventFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  10. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  11.   <fileNamePattern>${catalina.base}/logs/EventAnalysis/EventAnalysis.%d{yyyy-MM-dd}.log</fileNamePattern>
  12.   <maxHistory>30</maxHistory>
  13. </rollingPolicy>
  14. <encoder>
  15.   <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  16. </encoder>
  17. </appender>

  18. <logger name="com.travelsky.eventanalysis.dao" additivity="true">
  19. <level value="DEBUG" />
  20. </logger>

  21. <root level="info">
  22. <appender-ref ref="eventFile" />
  23. <appender-ref ref="STDOUT"/>
  24. </root>
  25. </configuration>
复制代码

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

000000000000.jpg


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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  4. <encoder>
  5.   <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
  6.   </pattern>
  7. </encoder>
  8. </appender>

  9. <!-- 日志生成位置 -->

  10. <appender name="eventFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  11.   <File>${catalina.base}/logs/BigeyeCenter/BigeyeCenter.log</File>
  12.   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  13.    <!-- daily rollover 保存历史记录到这个文件夹一日起为后缀 -->
  14.    <FileNamePattern>${catalina.base}/logs/BigeyeCenter/BigeyeCenter.%d{yyyy-MM-dd}.log</FileNamePattern>
  15.    <!-- keep 30 days' worth of history -->
  16.    <maxHistory>30</maxHistory>
  17.   </rollingPolicy>
  18.   <encoder>
  19.    <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
  20.    <charset>UTF-8</charset> <!-- 此处设置字符集 -->
  21.   </encoder>
  22. </appender>

  23. <logger name="com.travelsky.updateDatabase.dao" additivity="true">
  24. <level value="DEBUG" />
  25. </logger>

  26. <!-- 打印 日志级别-->
  27. <root level="info">
  28. <appender-ref ref="eventFile" />
  29. <appender-ref ref="STDOUT"/>
  30. </root>
  31. </configuration>
复制代码

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

看一下效果

00000000001111.jpg

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




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|手机版|依星源码资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2024-2-23 05:50

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表