Dom4j与Log4j的路径问题

 

Dom4jLog4j的路径问题

 

我们在写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();

              }

             

             

             

             

       }

 

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

                

           }

这样,调试信息会在异常出现以前出现,否则,异常出现,很可能最后得不到日志的调试信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值