日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java logging包_用JDK中提供的java.util.logging.*包创建Logger对象----原创

發(fā)布時間:2024/10/6 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java logging包_用JDK中提供的java.util.logging.*包创建Logger对象----原创 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

由于項目中用到了Applet與Servlet之間(客戶端用Applet、Server端用Servlet)的通信,要求:

1:>客戶端與服務(wù)端必須出Log.

2:>瀏覽器在加載Applet時已有好多個JAR文件需要加載,故不想再附加Log4J對應(yīng)的JAR包。

基于上面的要求,便想到了使用JDK自帶的LOG輸出功能,具體Logger對象的工廠類如下:

package com.quantanetwork.esm.logic.topo;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Locale;

import java.util.logging.FileHandler;

import java.util.logging.Formatter;

import java.util.logging.Level;

import java.util.logging.LogRecord;

import java.util.logging.Logger;

/**

* 拓?fù)銵ogger。

* @author xinwuhen

*

*/

public class TopoLogger {

// Log文件的路徑及格式:%h 代表用戶主目錄 %g 代表自動編號

private static final String logFile = "%h/topo%g.log";

// 寫入到任何一個文件的最大字節(jié)數(shù)

private static final int limit = 5 * 1024;

// 要使用的文件數(shù)

private static final int count = 20;

// 指定 append 模式

private static final boolean append = true;

// 默認(rèn)LOG級別

private static final Level defaultLevel = Level.INFO;

// Logger存儲器

private static final HashMap hmLogger = new HashMap();

// 為對Logger存儲器訪問提供的同步鎖對象

private static final Object syncLock = new Object();

/**

*?? 此處是測試方法。

**/

public static void main(String[] args) {

Logger logger = getLogger(null);?// 此處用Null代表用本類(TopoLogger)的類名作為Logger的名稱

try {

System.out.println(Long.parseLong(null));

} catch(Exception ex) {

TopoLogger.getLogger(null).log(Level.SEVERE, "很嚴(yán)重喲", ex);

}

}

/**

* 從Logger存儲器取得Logger對象。

* @param strClassName

* @return

*/

public static Logger getLogger(String strClassName) {

Logger logger = null;

synchronized (syncLock) {

if (strClassName == null) {??// 取當(dāng)前Logger類默認(rèn)的Logger對象

String strDefaultClassName = TopoLogger.class.getName();

logger = hmLogger.get(strDefaultClassName);

if (logger == null) {

logger = Logger.getLogger(strDefaultClassName);

hmLogger.put(strDefaultClassName, logger);

}

} else {?// 新生成一個指定名稱的Logger對象

logger = hmLogger.get(strClassName);

if (logger == null) {

logger = Logger.getLogger(strClassName);

hmLogger.put(strClassName, logger);

}

}

}

// 添加默認(rèn)的文件處理句柄

logger.addHandler(getFileHandler());

return logger;

}

/**

* 取默認(rèn)的文件處理句柄。

* @return

*/

private static FileHandler getFileHandler() {

FileHandler fileHandler = null;

try {

fileHandler = new FileHandler(logFile, limit, count, append);

} catch (SecurityException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

if (fileHandler != null) {

fileHandler.setLevel(defaultLevel);

fileHandler.setFormatter(new TopoLoggerFormatter());

}

return fileHandler;

}

/**

* Logger格式化處理器。

*

* @author xinwuhen

*/

final static class TopoLoggerFormatter extends Formatter {

@Override

public String format(LogRecord record) {

StringBuffer strOutput = new StringBuffer();

strOutput.append("[");

strOutput.append(getFormattedTime(record.getMillis(), "yyyy-MM-dd HH:mm:SS, sss"));

strOutput.append("], ");

strOutput.append(record.getLevel());

strOutput.append(", ");

strOutput.append(record.getSourceClassName());

strOutput.append(",");

strOutput.append(record.getSourceMethodName());

strOutput.append(" ");

strOutput.append(record.getMessage());

strOutput.append(":");

strOutput.append(System.getProperty("line.separator"));

Throwable throwAble = record.getThrown();

if (throwAble != null) {

strOutput.append(getThrowAbleInfo(throwAble));

}

return strOutput.toString();

}

/**

* 根據(jù)指定格式轉(zhuǎn)換時間。

* @param lngMillTimes

* @param strTimeFormat

* @return

*/

private String getFormattedTime(long lngMillTimes, String strTimeFormat) {

Date lvDate = new Date();

lvDate.setTime(lngMillTimes);

SimpleDateFormat lvFormat = new SimpleDateFormat(strTimeFormat, Locale.CHINA);

return lvFormat.format(lvDate);

}

/**

* 取例外對象的信息。

* @param throwAble

* @return

*/

private String getThrowAbleInfo(Throwable throwAble) {

String throwAbleInfo = "";

StackTraceElement[] ste = throwAble.getStackTrace();

if (ste != null) {

final String strLineSeparator = System.getProperty("line.separator");

StringBuffer sbStackTraceEle = new StringBuffer();

for (StackTraceElement stackTraceElement : ste) {

sbStackTraceEle.append("??????? at ");

sbStackTraceEle.append(stackTraceElement.toString());

sbStackTraceEle.append(strLineSeparator);

}

throwAbleInfo = throwAble.toString() + strLineSeparator + sbStackTraceEle;

}

return throwAbleInfo;

}

}

}

++++ 輸出結(jié)果如下(注意內(nèi)容是通過程序中定義的文件來存儲的,在$USER_HOME/topo0.log中):++++

[2008-03-07 21:01:328, 000], SEVERE, com.quantanetwork.esm.logic.topo.TopoLogger,main 很嚴(yán)重喲:

java.lang.NumberFormatException: null

at java.lang.Long.parseLong(Long.java:372)

at java.lang.Long.parseLong(Long.java:461)

at com.quantanetwork.esm.logic.topo.TopoLogger.main(TopoLogger.java:40)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

以上內(nèi)容拋磚引玉,望大家有其它輸出方式的更好實現(xiàn)。。。。。。另外,本人博客中的“JAVA技術(shù)文檔”鏈接分類也有對JDK的Logger的描述,可以參見該文檔互相學(xué)習(xí)。。。。。謝謝!!!

posted on 2008-03-07 21:00 心無痕 閱讀(2885) 評論(1) ?編輯 ?收藏 所屬分類: JAVA

總結(jié)

以上是生活随笔為你收集整理的java logging包_用JDK中提供的java.util.logging.*包创建Logger对象----原创的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。