pythonlogginglog-files

Creating log-files


i'm new here and a beginner in programming.

My problem is, my program should create a log-files during it runs.

It should look like this:

Start Copy "Log X" | Date-today | Time

Start Compress "Log X" | Date-today | Time | File sice

Ende Compress "Log X" | Date-today | Time | File sice

Start Delete "Log X" | Date-today | Time

End Delete "Log X" | Date-today | Time

...

' "Log X" means the name of the File

When i run the program again the "new log-file" should attachment to the "old file"

This is my program-code till now:

import os, datetime, zipfile

def showProgramInformation():
    print " "
    print "#######################################################"
    print "Python Log-Packer.py  Ver. 1.4"
    print "Search for files, separate the .log fils, compress them" 
    print "and delete the origin file"
    print "log-File = Files with '.log' in name" 
    print "#######################################################"
    print " "

def conversationWithUser(talk):
    print talk
    return raw_input()

def doesPathExists(path):
    if os.path.exists(path):
        return True
    return False   

def isFileALogFile(filePath):
    if filePath.find(".log") != -1:
        return True
    return False

def formatSeveralDateTime(dateTime):
    return datetime.datetime.fromtimestamp(dateTime).strftime('%Y-%m-%d')

def isFileInDateRange(filePath, startDate, endDate):
    fileDate = formatSeveralDateTime(os.path.getmtime(filePath))
    if  fileDate >= startDate and fileDate <= endDate:
        return True
    return False

def zipLogFile(zipFilePath, zipArchivContent):
    myzip = zipfile.ZipFile(zipFilePath + '.zip', 'w', zipfile.ZIP_DEFLATED)
    myzip.write(zipArchivContent)

def isValidDate(dateToBeChecked):
    if len(dateToBeChecked) != 10:
        return False
    try:
        datetime.datetime.strptime(dateToBeChecked, '%Y-%m-%d')
        return True
    except ValueError:
        return False  

def repeatUserInputUntilValidInput(aString):
    userInsert = False
    while userInsert == False:
        newString = aString.upper()
        if  newString == "Y":
            userInsert = True
            return True
        elif newString == "N":
            userInsert = True
            return False
        else:
            print errorMessage
            aString = conversationWithUser("Please insert 'Y' or 'N'!")

def pathNameLongerThan0(path):
    if len(path) > 0:
        print "Path does not exist. Please try it again!"

############## here starts main Program ##############
showProgramInformation()
checkIfInofsAreOk = "N"
errorMessage = "Your input is invalid. Please try  again!"


while repeatUserInputUntilValidInput(checkIfInofsAreOk) == False:
    logFolder = ""
    logArchivFolder = ""
    validLogFiles = []

    while not doesPathExists(logFolder):
        pathNameLongerThan0(logFolder)
        logFolder = conversationWithUser("Please enter a  valid path: ")


    userWanntDateRange = conversationWithUser("Do you want to define a Date Range?  (Y/N): ")
    if repeatUserInputUntilValidInput(userWanntDateRange):
        dateRangeIsOk = False
        beginDateIsOk = False
        endDateIsOK = False
        while not dateRangeIsOk:
            while not beginDateIsOk:
                userStartDate = conversationWithUser("Please enter the beginning date (e.g.  2014-05-23): ")
                beginDateIsOk = isValidDate(userStartDate)
                if beginDateIsOk == False:
                    print errorMessage
            while not endDateIsOK:
                userEndDate = conversationWithUser("Please enter the ending date (e.g.  2014-11-03): ")
                endDateIsOK = isValidDate(userEndDate)
                if endDateIsOK == False:
                    print errorMessage
            if userStartDate <= userEndDate:
                dateRangeIsOk = True
            else:
               print errorMessage + " \nDate out of Range. Begin again!"
               beginDateIsOk = False
               endDateIsOK = False
    else:
        userStartDate = '1900-01-01' # set as default a wide date to make all files
        userEndDate = '2090-01-01'  # set as default a wide date to make all files


    userWanntALogArchivFolder = conversationWithUser("Do you want create a new folder or archive the files in another folder?  (Y/N): ")
    if repeatUserInputUntilValidInput(userWanntALogArchivFolder):
        userWanntToCreatANewFolder = conversationWithUser("Do you want to create a new folder?  (Y/N): ")
        if repeatUserInputUntilValidInput(userWanntToCreatANewFolder): 
            logArchivFolder = conversationWithUser("Enter a new fullpath folder please:")
            pathIsAbsolut = os.path.isabs(logArchivFolder)
            while pathIsAbsolut == False:
                print errorMessage 
                logArchivFolder = conversationWithUser("Enter a new fullpath folder please:")
                pathIsAbsolut = os.path.isabs(logArchivFolder)    
        else: 
            logArchivFolder = conversationWithUser("Enter the fullpath folder please:")
            while not doesPathExists(logArchivFolder):
                pathNameLongerThan0(logArchivFolder)
                logArchivFolder = conversationWithUser("Please enter a  valid path: ")              
    else:
        logArchivFolder = logFolder + "/" + logArchivFolder


    print "#######################################################"
    print "Informations "
    print "Logfolder:      " + logFolder
    print "Stardate:       " + userStartDate
    print "Enddate:        " + userEndDate
    print "Destination:    " + logArchivFolder
    print "#######################################################"
    checkIfInofsAreOk = conversationWithUser("Are those informations correct? (Y/N): ")
    print "#######################################################"   

############ here starts compress process ############        
for logFolder, subFolders, files in os.walk(logFolder):
    print "#######################################################"
    for file in files:
        absoluteLogFilePath = logFolder + '/' + file
        if isFileALogFile(file) and isFileInDateRange(filePath=absoluteLogFilePath, startDate=userStartDate, endDate=userEndDate):
            validLogFiles.append(absoluteLogFilePath)
userFolderPath = logFolder

if len(validLogFiles) > 0:
    if len(logArchivFolder) > 0:
        if not doesPathExists(logArchivFolder):
            os.mkdir(logArchivFolder)    
        userFolderPath = logArchivFolder

    for logFile in validLogFiles:
        zipFilePath = userFolderPath + '/' + os.path.basename(logFile)
        zipLogFile(zipFilePath, logFile)
        print logFile
        os.remove(logFile)
print "#######################################################"        
print "finish"
print "#######################################################"
quit()

It would be nice if they could help me. (Sorry if my english is no so good)

Yours truly

Johannes


Solution

  • The logging module defines functions and classes which implement a flexible event logging system for applications and libraries.

    FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
    logging.basicConfig(format=FORMAT)
    d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
    logger = logging.getLogger('tcpserver')
    logger.warning('Protocol problem: %s', 'connection reset', extra=d)
    

    would print something like

    2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset
    

    You can use a Formatter to define your own output format and use the different LogRecord attributes to merge data from the record into the format string.