日誌列印兩次(問題)
今天碰到了一個日誌被列印兩次的問題
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();
}
}
整個執行下來會出現列印兩次日誌 就是紅色的地方執行了兩次
整個過程都是單執行緒
暫時還不知道怎麼解釋(望有人能指點下 謝謝)