如何将超过 maxBytes 后将在 rotationFileHandler 中创建的日志文件重命名为当前 datetime.log?

苏尼哈·贾维德

是否可以覆盖rotationFileHandler 的rollOver() 以便日志文件名将是当前日期time.log?

我是 Python 编程的新手。

代码:

def logger(self , inputStr):

    dateTime = datetime.datetime.now().strftime('%d-%m-%Y-%H-%M-%S')

    fileName = 'log-'+dateTime+'.log'
    Path = path+'/'+fileName

    logger = logging.getLogger("Rotating Log")
    logger.setLevel(logging.DEBUG)
    #logger = logging.Formatter('%(asctime)-15s %(clientip)s %(user)-8s %(message)s')         
    handler = RotatingFileHandler(Path, maxBytes=1000000, backupCount=5)
    logger.addHandler(handler)
    for i in range(1000000):
        logger.debug("This is test log line %s" % i)
苏尼哈·贾维德

这就是如何覆盖 doRollover() 以将备份文件名作为当前 datetime.log myRotatingFileHandler.py

import datetime 
import os
import sys
import logging
from logging.handlers import BaseRotatingHandler
import time

class myRotatingFileHandler(BaseRotatingHandler):
def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0):
    dateTime = datetime.datetime.now().strftime('%d-%m-%Y-%H-%M-%S')

    filename = filename +'/log-'+dateTime+'.log'
    if maxBytes > 0:
        mode = 'a'
    BaseRotatingHandler.__init__(self, filename, mode, encoding, delay)
    self.maxBytes = maxBytes
    self.backupCount = backupCount

def doRollover(self):
    dateTime = datetime.datetime.now().strftime('%d-%m-%Y-%H-%M-%S')
    #fileName = 'log-'+dateTime+'.log'
    df = ''
    if self.stream:
        self.stream.close()
        self.stream = None
    if self.backupCount > 0:
        for i in range(self.backupCount - 1, 0, -1):
            sf = self.baseFilename+'/'+'log-'+ datetime.datetime.now().strftime('%d-%m-%Y-%H-%M-%S') + '.log'
            df = self.baseFilename+'/'+'log-'+ datetime.datetime.now().strftime('%d-%m-%Y-%H-%M-%S') + '.log'
            if os.path.exists(sf):
                if os.path.exists(df):
                    os.remove(df)
                os.rename(sf, df)
        wkspFldr = os.path.dirname(self.baseFilename)
        df = wkspFldr+'/'+'log-'+ datetime.datetime.now().strftime('%d-%m-%Y-%H-%M-%S') + '.log'
        print 'LOG FILE ---> ',df
        if os.path.exists(df):
            os.remove(df)
        if os.path.exists(self.baseFilename):
            os.rename(self.baseFilename, df)
    if not self.delay:
        self.stream = self._open()

def shouldRollover(self, record):
    if self.stream is None:                 
        self.stream = self._open()
    if self.maxBytes > 0:                   
        msg = "%s\n" % self.format(record)
        self.stream.seek(0, 2)  #due to non-posix-compliant Windows feature
        if self.stream.tell() + len(msg) >= self.maxBytes:
            return 1
    return 0

这是我们有记录器功能config.py的 .py 代码

import logging
import os
import datetime
from logging.handlers import RotatingFileHandler
import time
from subprocess import call
from time import gmtime, strftime
import re
import logging.handlers

import myRotatingFileHandler

path = ''
Interval = ''
Value = 0

class config:
def __init__(self, givenPath, interval, value):
    global path
    global Interval
    global Value
    path = givenPath
    Interval = interval
    Value = value

def remove_file_by_days(self):
    now = time.time()
    cutoff = now - (value * 86400)
    files = os.listdir(path)
    file_path = os.path.join(path)

    for xfile in files:
        filePath = file_path + xfile
        if os.path.isfile(filePath):
            t = os.stat(filePath)
            c = t.st_ctime
            if c < cutoff:
                print 'removing file...'
                print filePath
                os.remove(filePath)

def remove_file_by_hours(self):
    dir_to_search = os.listdir(path)
    for file in filenames:
        curpath = os.path.join(path, file)
        file_modified = datetime.fromtimestamp(os.path.getmtime(curpath))
        if datetime.datetime.now() - file_modified > datetime.timedelta(hours = Value):
            print 'removing file...'
            print curpath
            os.remove(curpath)

def remove_file_by_minutes(self):
    dir_to_search = os.listdir(path)
    for file in dir_to_search:
        curpath = os.path.join(path, file)
        file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath))
        if datetime.datetime.now() - file_modified > datetime.timedelta(hours = Value/60 ):
            print 'removing file...'
            print curpath
            os.remove(curpath)

def logger(self , inputStr):
    dateTime = datetime.datetime.now().strftime('%d-%m-%Y-%H-%M-%S')
    fileName = 'log-'+dateTime+'.log'
    Path = path
    logger = logging.getLogger("Rotating Log")
    logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler = myRotatingFileHandler.myRotatingFileHandler(Path, maxBytes=1024000*10, backupCount=5)
    handler.setFormatter(formatter)
    logger.addHandler(handler)

    for i in range(1000000):
        logger.debug("This is test log line %s" % i)

def debug(self, inputStr):
    if Interval == 'days':
        self.remove_file_by_days()
    if Interval == 'hours':
        self.remove_file_by_hours()
    if Interval == 'minutes':
        self.remove_file_by_minutes()
    self.logger(inputStr)

调用主logMain.py

import logging
import os
import sys
import config
from config import config

if __name__ == '__main__':
obj = config('/var/www/cgi-bin/pythonPractice/test/','minutes', 2)
obj.debug('abc')

总的来说,这个程序会根据天数、小时数和分钟数从给定路径中删除日志文件。并创建名为 current datetime.log 的日志文件,如果日志文件超过 10 mb,它将创建名为 current datetime.log 的其他日志文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将文件重命名为.mm后如何进行目标c样式分配

来自分类Dev

Visual Studio Code - 将文件从小写重命名为大写后出错

来自分类Dev

如何将文件重命名为..(点点)?

来自分类Dev

重命名上一个文件夹中的datetime后如何将文件移动到新文件夹

来自分类Dev

重命名前一个文件夹中的datetime后如何将文件移动到新文件夹

来自分类Dev

如何在Powershell中复制文件夹并将其重命名为当前日期和时间?

来自分类Dev

Winrar批处理脚本(略有改动)-将提取的文件重命名为当前目录

来自分类Dev

在Windows 10中,如何将文件重命名为包含带有变音符的字符的文件名?

来自分类Dev

如何使用 exiftool 将文件重命名为 CSV 导入文件中包含的新名称

来自分类Dev

将文件重命名为创建时间(仅批处理文件)

来自分类Dev

如何将具有已知名称的文件重命名为存储在变量中的新名称?

来自分类Dev

如何在Windows 7中将文件重命名为.htaccess?

来自分类Dev

linux-shell:将文件重命名为创建时间

来自分类Dev

将图像重命名为exif时间:创建唯一的文件名

来自分类Dev

C#将文件重命名为与其他目录中的文件相同的名称

来自分类Dev

如何将多个文件重命名为其内容的MD5总和?

来自分类Dev

如何将文件重命名为带后缀的单调递增序列号?

来自分类Dev

如何将JPEG文件重命名为图像日期,并添加每天重置的计数?

来自分类Dev

如何将多个文件重命名为一个名称

来自分类Dev

将文件名从大写重命名为小写

来自分类Dev

将多个文件重命名为其后缀

来自分类Dev

将文件重命名为顺序编号

来自分类Dev

终端:将多个文件重命名为数字顺序

来自分类Dev

将文件重命名为其BASE64

来自分类Dev

Linux将文件重命名为dirname

来自分类Dev

自动将.rdf文件重命名为.XML

来自分类Dev

将文件重命名为子目录

来自分类Dev

将Visual Studio(2013)中的Proprogate文件重命名为GIT,就像GIT重命名一样?

来自分类Dev

将Visual Studio(2013)中的Proprogate文件重命名为GIT,就像GIT重命名一样?

Related 相关文章

  1. 1

    将文件重命名为.mm后如何进行目标c样式分配

  2. 2

    Visual Studio Code - 将文件从小写重命名为大写后出错

  3. 3

    如何将文件重命名为..(点点)?

  4. 4

    重命名上一个文件夹中的datetime后如何将文件移动到新文件夹

  5. 5

    重命名前一个文件夹中的datetime后如何将文件移动到新文件夹

  6. 6

    如何在Powershell中复制文件夹并将其重命名为当前日期和时间?

  7. 7

    Winrar批处理脚本(略有改动)-将提取的文件重命名为当前目录

  8. 8

    在Windows 10中,如何将文件重命名为包含带有变音符的字符的文件名?

  9. 9

    如何使用 exiftool 将文件重命名为 CSV 导入文件中包含的新名称

  10. 10

    将文件重命名为创建时间(仅批处理文件)

  11. 11

    如何将具有已知名称的文件重命名为存储在变量中的新名称?

  12. 12

    如何在Windows 7中将文件重命名为.htaccess?

  13. 13

    linux-shell:将文件重命名为创建时间

  14. 14

    将图像重命名为exif时间:创建唯一的文件名

  15. 15

    C#将文件重命名为与其他目录中的文件相同的名称

  16. 16

    如何将多个文件重命名为其内容的MD5总和?

  17. 17

    如何将文件重命名为带后缀的单调递增序列号?

  18. 18

    如何将JPEG文件重命名为图像日期,并添加每天重置的计数?

  19. 19

    如何将多个文件重命名为一个名称

  20. 20

    将文件名从大写重命名为小写

  21. 21

    将多个文件重命名为其后缀

  22. 22

    将文件重命名为顺序编号

  23. 23

    终端:将多个文件重命名为数字顺序

  24. 24

    将文件重命名为其BASE64

  25. 25

    Linux将文件重命名为dirname

  26. 26

    自动将.rdf文件重命名为.XML

  27. 27

    将文件重命名为子目录

  28. 28

    将Visual Studio(2013)中的Proprogate文件重命名为GIT,就像GIT重命名一样?

  29. 29

    将Visual Studio(2013)中的Proprogate文件重命名为GIT,就像GIT重命名一样?

热门标签

归档