查看: 107|回复: 0

    django实现日志按日期分割

    [复制链接]

    267

    主题

    267

    帖子

    614

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    614
    发表于 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

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




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

    本版积分规则

    QQ|手机版|小黑屋|依星源码资源网-分享编程干货的网站 ( 鲁ICP备2021043233号-3 )

    GMT+8, 2023-2-3 09:03

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

    © Powered by Net188.com X3.4

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