Réduit le volume des fichiers logs

Description

Ce programme divise en les datant les fichiers logs d'un serveur Apache.
Vous pouvez utiliser des multiples de 8192 si vous préférez des sous-dossiers plus gros.

Aucune garantie.Pour moi ça marche.
Faites des tests avec des copies de vos fichiers.

Sur windows : placer tous les fichiers (class cmd) dans votre dossier log et double cliquez.

Sur Unix : Habituellement vous êtes fortiches moi je ne connais rien d'unix.

Source / Exemple :


//java SplitFile1 access.log  4000
//C:\Program Files\EasyPHP1-7\apache\logs
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;

class SplitFile {

private static File fichier, tempFile;

	public static void parseArgsLine(String [] items) {
    String date = (new SimpleDateFormat("yyyy-MM-dd").format((Calendar.getInstance()).getTime()));
    String chunkName = date + items[0];
    fichier = new File(items[0]);

    int fileBytes = (int)fichier.length();
    int chunksSize = Integer.parseInt(items[1]);

	
	if (fichier.exists() && chunksSize < fileBytes){
		 splitIt(chunkName, chunksSize, fichier);
	}else{
		 if (!fichier.exists()) usage(1);
		  else
			 if (chunksSize > fileBytes) usage(2);
	}
  }

  public static void main(String [] args) {
    if (args.length == 2) {
	parseArgsLine(args);
    }else usage(3);
  }

  public static void splitIt(String partName, int chunkBytes, File fileToSplit) {
    boolean flagApache = true;
    int c;
    int incr = 0;
    int extNumber = 1;
    String newChunk = partName + extNumber;
    FileOutputStream s = null;
    BufferedOutputStream sortie = null;

    try {
      FileInputStream e = new FileInputStream(fileToSplit);
      s = new FileOutputStream(newChunk);

      BufferedInputStream entree = new BufferedInputStream(new DataInputStream(e));
      sortie = new BufferedOutputStream(new DataOutputStream(s));

      while ((c = entree.read()) != -1) {

        if (incr <= chunkBytes) {
          sortie.write(c);
        } else {
          if (incr > chunkBytes && c != '\n') {
            sortie.write(c);
          } else {
		  sortie.write(c);
		  sortie.close();
		  extNumber++;
          incr=0;
          newChunk = partName + extNumber;
		  tempFile = new File(newChunk);
		  s = new FileOutputStream(tempFile);
		  sortie = new BufferedOutputStream(new DataOutputStream(s));
          }
        }
        incr++;
      }
	  entree.close();
      sortie.flush();
      sortie.close();
	
	//Exec stopStart = new Exec();
	//if(stopStart.execWait("\"C:\\Program Files\\EasyPHP1-7\\apache\\apache.exe\" -k stop")){
	//System.out.println(tempFile.getName() + "  exist: " + tempFile.exists());
	//System.out.println(fichier.getName() + "  exist: " + fichier.exists());
	;
	if(fichier.delete()){
		System.out.println("Last chunk renamed to " + fichier + " : " + tempFile.renameTo(fichier));
	}else{
	System.out.println("Last chunk " + tempFile + " not  renamed to: " + fichier);
	}

      //flagApache = false;
      //}else
      //	System.out.print("not stopped");
      //if(!flagApache &&
      //stopStart.exec("\"C:\\Program Files\\EasyPHP1-7\\apache\\apache.exe\" -k start"))
      //System.out.print("Apache restarted.");

    } catch (IOException io) {}
	
  }

  public static void usage(int anInt) {

	  switch(anInt){
	  
	  case 1:
		System.out.println("\t\tNote: Something wrong with the name of the file.\n");
	  break;
	  case 2:
		System.out.println("\t\tNote: Chunks size must be smaller than file size.\n");
	  break;
	  case 3:
		 System.out.println("Usage: java SplitFile < name of the file >"
        + "< chunks size smaller than file size >"
        + ".\n\n\t\tThe last chunk will be renamed to the input file name.");
	  break;
	  default:
	  }
  }
} //end of class

Conclusion :


java SplitFile error.log 8192

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.