packageio;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;/***
*@authorchunhuif 2008-7-3
*@version1.0.0*/publicclassMyLog4j {privatestaticString fileName="mylog.txt";//文件路径privatestaticString maxFileSize="10k";//单个文件大小的最大值 可以为 6M 、10G 、3m等等字符格式privatestaticString maxBackupIndex="10";//最多备份文件数privateintmaxIndex;privatelongmaxSize;//文件最大值privateBufferedWriter bw;privatelongcurrentSize=0;//byteprivateFile myFile;publicMyLog4j(){super();
init();
}privatevoidinit(){
myFile=newFile(fileName);try{
rollingFile();
}catch(IOException e) {
e.printStackTrace();
}
currentSize=myFile.length();
maxIndex=Integer.valueOf(maxBackupIndex.trim());if(maxFileSize.contains("k")) {
maxSize=Long.valueOf(maxFileSize.replace("k","").trim())*1024;
}elseif(maxFileSize.contains("K")) {
maxSize=Long.valueOf(maxFileSize.replace("K","").trim())*1024;
}elseif(maxFileSize.contains("m")) {
maxSize=Long.valueOf(maxFileSize.replace("m","").trim())*1024*1024;
}elseif(maxFileSize.contains("M")) {
maxSize=Long.valueOf(maxFileSize.replace("M","").trim())*1024*1024;
}elseif(maxFileSize.contains("G")) {
maxSize=Long.valueOf(maxFileSize.replace("G","").trim())*1024*1024*1024;
}elseif(maxFileSize.contains("g")) {
maxSize=Long.valueOf(maxFileSize.replace("g","").trim())*1024*1024*1024;
}elseif(maxFileSize.contains("T")) {
maxSize=Long.valueOf(maxFileSize.replace("T","").trim())*1024*1024*1024*1024;
}elseif(maxFileSize.contains("t")) {
maxSize=Long.valueOf(maxFileSize.replace("t","").trim())*1024*1024*1024*1024;
}
}privatesynchronizedvoidrollingFile()throwsIOException{
File f=newFile(fileName);if(f.exists()){
rolling(f);
}
f.createNewFile();
bw=newBufferedWriter(newFileWriter(f,true));
}/*** 重命名,内部调用例如 将mylog.txt 命名为mylog1.txt mylog1.txt 命名为mylog2.txt
*@paramff*/privatevoidrolling(File ff){if(bw!=null)try{
bw.close();
}catch(IOException e) {
e.printStackTrace();
}
String fn=ff.getName();
String preFileName=null;
String tailFileName=null;intfileNum=1;if(fileName.contains(".")){intindex=fileName.lastIndexOf(".");
preFileName=fileName.substring(0,index);
String str=fn.substring(preFileName.length(),fn.indexOf("."));if(str!=null&&!str.equals("")){
fileNum=Integer.valueOf(str)+1;
}
tailFileName=fileName.substring(index);
}else{
preFileName=fileName;
fileNum=Integer.valueOf(fn.substring(preFileName.length()));
tailFileName="";
}if(fileNum<=maxIndex){
File nextFile=newFile(preFileName+fileNum+tailFileName);if(nextFile.exists()){
rolling(nextFile);
}
ff.renameTo(nextFile);
}else{
ff.delete();
}
}/*** 将信息写入log中
*@parammessage*/publicsynchronizedvoidwrite(String message){if(currentSize+message.getBytes().length>maxSize){try{
rollingFile();
currentSize=0;
}catch(IOException e) {
e.printStackTrace();
}
}try{
bw.write(message);
bw.flush();
currentSize+=message.getBytes().length;
}catch(IOException e) {
e.printStackTrace();
}
}/*** 将信息写入log中
*@parammessage*/publicsynchronizedvoidwriteLine(String message){
write(message+"\n");
}/*** 将文件 file 中的内容写入log中
*@param*/publicsynchronizedvoidwrite(File file){if(!file.exists()){
System.out.println("\""+file.getName()+"\" not exist!");
}
BufferedReader br=null;try{
br=newBufferedReader(newFileReader(file));
String message=null;while((message=br.readLine())!=null)
write(message+"\n");
}catch(IOException e1) {
e1.printStackTrace();
}finally{if(br!=null){try{
br.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}publicstaticvoidmain(String[] args) {finalMyLog4j log=newMyLog4j();for(intl=0;l<50;l++){
Thread t=newThread(){publicvoidrun(){for(inti=0;i<10;i++){
log.write(Thread.currentThread().getName()+""+i+"\n");
}
}
};
t.setName("Thread_"+l);
t.start();
}for(inti=0;i<10;i++){
MyLog4j log1=newMyLog4j();
log1.write(Thread.currentThread().getName()+"="+i+"\n");
}
}
}