永发信息网

怎么样处理Dom4j与Log4j的路径问题

答案:1  悬赏:70  手机版
解决时间 2021-11-28 03:49
怎么样处理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;


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();
}

}

public void widgetDefaultSelected(SelectionEvent arg0)
{
// NIU_TODO 自动生成方法存根

}

}
同样的道理,这样规则也同样适用于生成文件的时候,给文件指定一个路径,比如
Writer out=newWriter(new FileWriter("./XML/文件名"),format);
这句话将在工程的根目录下的XML目录下生成指定的文件。
注意:在程序中写的路径中的目录,必须事先建立好,否则会出现java.io.FileNotFoundException: ./XML/test.xml (系统找不到指定的路径。)异常.
最后一条规则,在捕捉异常得语句中,日志的调试语句最好写在异常写入堆栈的语句的前面。
如下:
catch (IOException e)
{
// NIU_TODO 自动生成 catch 块
logger.debug("生成XML文件失败");
e.printStackTrace();

}
这样,调试信息会在异常出现以前出现,否则,异常出现,很可能最后得不到日志的调试信息。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
220v1200w单相电机用多大线 、请问
开心宠物地址好找么,我有些事要过去,
三只青蛙掉进鲜奶桶是什么故事?
台铃电动车能行驶600公里,多少钱一辆
七八平米的卧室够用吗
求助:错误1 命名空间“System”中不存在类型
老婆因为1000块钱不理我一个星期了
文言文中十八虚词
古代玉麒麟腰带扣价格
芬兰LIFAair空气净化器怎么样,使用感受
将1到25个数字填入下列25(5×5)个格子中,
巧填符号有方法吗
镀锌问题。喷涂
两人吃青椒肉丝两个人都16岁大概需要多少肉一
已知两个圆的半径之比是3:5,较小的圆的半径是
推荐资讯
广州佳瀚机电设备有限公司怎么样?
如何认定自建自用住房
华硕P5PL2-E主板怎么超频
什么会产生pm10
43x(80十37)一80x(43一37)怎样算间便
今天分手第八天,要我怎么去做
介绍一下新年传统习俗一百字左右
孩子晚上哭闹是中邪吗
相识相知二十历程风雨无阻,相聚相守无常岁月
拳皇2002里面每一个角色的隐藏必杀技
梨花王酒38度225毫升俩瓶装价格
解签文 求运签 在线等感谢!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?