java 日志处理_java 日志处理

这是一个自定义的日志记录类`MyLog4j`,它实现了将日志信息写入指定文件的功能,并能根据设定的最大文件大小进行文件滚动。当日志文件超过指定大小时,会将其重命名为备份文件并创建新的日志文件。同时,该类还支持将整个文件的内容写入日志。在测试代码中,创建多个线程并发写入日志,展示了其线程安全性和高并发处理能力。
摘要由CSDN通过智能技术生成

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");

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值