Dom4j與Log4j的路徑問題
我們在寫java代碼的時候,有時候需要對檔案進行讀寫,特別是對一些設定檔的讀寫,比如對log4j.properties這樣的日誌設定檔的讀取,放到那個目錄地下才能夠正確的配置Log4j。還有,當我們產生或讀取XML文檔的時候,我們在程式中如何寫才能讀取到XML檔案或者才能把XML檔案放到合適的地方。
下面舉幾個例子
1. Log4j的設定檔路徑問題。
首先看看我的程式的目錄結構:
如在程式中寫成PropertyConfigurator.configure("log4j.properties");
那麼把檔案log4j.properties放到如下圖的位置將能正確執行,
也就是說原始碼中的目前的目錄是指工程的根目錄。如果我想在根目錄下面建一個config的目錄,然後把設定檔log4j.properties放到這個目錄下面,那麼我們必須把程式的代碼改為
“PropertyConfigurator.configure("./config/log4j.properties");”注意第一個/前面的那個“.”,否則程式將不能正確運行。
好了,這裡給出我的log4j.properties的檔案清單,使用log4j的原始碼,最後給出記錄檔的輸出,以便大家方便使用。
log4j.properties的檔案:
#####################################################################
# Categories and levels
#####################################################################
log4j.rootCategory=DEBUG, FileApp, ConApp
log4j.category.de.jayefem=DEBUG, FileApp, ConApp
#####################################################################
# Appenders
#####################################################################
# ConApp is set to be a ConsoleAppender.
log4j.appender.ConApp=org.apache.log4j.ConsoleAppender
log4j.appender.ConApp.Target=System.out
log4j.appender.ConApp.layout=org.apache.log4j.PatternLayout
log4j.appender.ConApp.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
# FileApp
log4j.appender.FileApp=org.apache.log4j.RollingFileAppender
log4j.appender.FileApp.File=./log/debug.log
log4j.appender.FileApp.MaxFileSize=500KB
# Keep one backup file
log4j.appender.FileApp.MaxBackupIndex=1
log4j.appender.FileApp.layout=org.apache.log4j.PatternLayout
log4j.appender.FileApp.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
日誌輸出的目錄為工程根目錄下面的log
Log檔案的輸出:
2006-08-07 05:12:58,109 [main] DEBUG niu.xml.ModifyXml - 開始調試ModifyXml
2006-08-07 05:12:58,359 [main] DEBUG niu.xml.ModifyXml - 修改XML檔案成功
2006-08-07 05:13:01,125 [main] DEBUG niu.xml.ModifyXml - 開始調試ModifyXml
2006-08-07 05:13:01,156 [main] DEBUG niu.xml.ModifyXml - 修改XML檔案成功
2006-08-07 05:22:28,109 [main] DEBUG niu.xml.ModifyXml - 開始調試ModifyXml
2006-08-07 05:22:28,359 [main] DEBUG niu.xml.ModifyXml - 修改XML檔案成功
使用log4j的原始碼:
package niu.xml;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
/**
* @author YongJie
*
*/
public class FormatXml implements SelectionListener
{
static Logger logger = Logger.getLogger(FormatXml.class);
public void widgetSelected(SelectionEvent arg0)
{
// NIU_TODO 自動產生方法存根
PropertyConfigurator.configure("./config/log4j.properties");
logger.debug("開始調試FormatXml");
SAXReader reader=new SAXReader();
Document document=null;
try
{
document=reader.read(new File("test.xml"));
logger.debug("讀取源檔案到對象document");
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("GB2312");
logger.debug("設定字元編碼為GB2312");
try
{
XMLWriter writer=
new XMLWriter(new FileWriter("testformat.xml"),format);
writer.write(document);
writer.close();
logger.debug("格式檔案寫入成功");
} catch (IOException e)
{
// NIU_TODO 自動產生 catch 塊
logger.debug("格式檔案寫入失敗");
e.printStackTrace();
}
} catch (DocumentException e)
{
// NIU_TODO 自動產生 catch 塊
logger.debug("讀取源檔案失敗");
e.printStackTrace();