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文件,这里就不贴码了 看一下效果
看一下修改日期和生成日期你就看懂了。。。
|