1. 程式人生 > >日誌列印兩次(問題)

日誌列印兩次(問題)

今天碰到了一個日誌被列印兩次的問題

Configuration類

/**
 * 配置檔案資訊
 * @author Administrator
 *
 */
public class Configuration {

private static Logger LOG = Logger.getLogger(Configuration.class);

/**
* 檔案路徑(備用 當前資訊重新整理到本地)
*/
public static String filePath = null;
/**
* 鍵值對
*/
private static Properties prop = null;
/**
* 靜態建構函式
*/
static{
if(prop==null){
readConfiguration();
}
}
/**
* 預設建構函式
*
*/
public Configuration(){
if(prop==null){
readConfiguration();
}


}
/**
* prop
* @return
*/
public Properties getProperties(){
return prop;
}
/**
* 獲取值
* @param key
* @return
*/
public String getValue(String key){
if(key!=null&&!key.equals("")){
return prop.getProperty(key);
}
return null;
}
/**
* 獲取值
* @param key
* @return
*/
public String getValue(String key,String defaultVaule){
if(key!=null&&!key.equals("")){
return prop.getProperty(key,defaultVaule);
}
return null;
}
/**
* 讀取配置資訊

* @return
*/
private static synchronized void readConfiguration() {
/**
* 讀取dataexchange.properties檔案
*/
InputStream in = null;
Properties p = null;
try {
URL url = DEUtil.class.getResource(Constants.CONFIG_FILE_NAME);
if(url!=null){
filePath = java.net.URLDecoder.decode(url.getPath(),"utf-8");
LOG.info(filePath);

in = url.openStream();
}else{
in = DEUtil.class.getResourceAsStream(Constants.CONFIG_FILE_NAME);
}
p = new Properties();
if(p!=null){
p.load(in);
}else{
throw new NullPointerException();
}
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
if(in!=null){
in.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (p != null) {
prop = p;
}else{
throw new NullPointerException();
}
}
/**
* 重新整理鍵值對到本地檔案
*
*/
public synchronized void porpertiesFlushBack(){
if(prop!=null){
//檔案輸出流 
OutputStream fos = null;
try {
fos = new FileOutputStream(Configuration.filePath);
//將Properties集合儲存到流中
prop.store(fos, "Copyright (c) dlmu 233"); 
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
if(fos!=null){
fos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}else{
throw new NullPointerException();
}
}
}

還有一個工具類:DEUtil(貼部分程式碼)

/**
 * 資料交換工具類
 * 
 * @author Administrator
 * 
 */
public class DEUtil {
/**
* 配置資訊
*/
private static Configuration conf = new Configuration();

。。。。。省略部分程式碼

}

還有一個入口:DataExchangeClient

/**
 * 資料交換客戶端
 * @author Administrator
 *
 */
public class Client {

private static Logger LOG = Logger.getLogger(Client .class);
/**
* 配置資訊
*/
private Configuration conf = null;
/**
* @param args
* @author Administrator
*/
public static void main(String[] args){
/** 建立客戶端例項 */
Client client = new Client ();
client.run();
}
/**
* 初始化函式

*/
private void initial(){
this.conf = new Configuration();

}
/**
* 預設建構函式
*
*/
public Client () {
initial();
}

}

整個執行下來會出現列印兩次日誌 就是紅色的地方執行了兩次

整個過程都是單執行緒

暫時還不知道怎麼解釋(望有人能指點下 謝謝)