免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 1985anubis
打印 上一主题 下一主题

菜鸟的问题!!!!! 关于编译Properties文件 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-03-30 17:23 |只看该作者
原帖由 carset 于 2006-3-30 16:17 发表
如果想同时把日志记录进文件,就加个 FileHandler

[code]
                                                String logFile="mypath/test.log";
                        FileHandler flog = new FileHandler(logFile,  ...


请问FileHandler 这个类是在哪个包里面?

论坛徽章:
0
12 [报告]
发表于 2006-03-30 17:38 |只看该作者
source.test 是个名字.我随便起的.那不是有引号么.
FileHandler  java.util.logging.FileHandler



  1. getLogger
  2. public static Logger getLogger(String name)为指定子系统查找或创建一个 logger。如果已经创建了具有给定名称的 logger,则返回该 logger。否则创建一个新的 logger。
  3. 如果创建了新的 logger,则根据 LogManager 的配置来其配置日志级别,并将日志输出发送到其父处理程序。日志配置注册在 LogManager 全局命名空间内。


  4. 参数:
  5. name - logger 的名称。这应该是一个圆点分隔的名称,并且通常应该基于子系统的包名或类名(如 java.net 或 javax.swing)。
  6. 返回:
  7. 适合的 Logger。
  8. 抛出:
  9. NullPointerException - 如果 name 为 null。

复制代码

[ 本帖最后由 carset 于 2006-3-30 17:43 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2006-03-31 09:45 |只看该作者
我怎么越看越不明白阿!!!!!!!!!!!11

论坛徽章:
0
14 [报告]
发表于 2006-03-31 09:48 |只看该作者
似乎明白了!!!!!!!!!!! 谢谢拉!!!!!!!!!

论坛徽章:
0
15 [报告]
发表于 2006-04-01 03:32 |只看该作者
原帖由 carset 于 2006-3-30 16:17 发表
如果想同时把日志记录进文件,就加个 FileHandler

[code]
                                                String logFile="mypath/test.log";
                        FileHandler flog = new FileHandler(logFile,  ...

我不知道为什么log输出到什么地方一定要在代码里面“硬编码”写死,用配置文件不行吗?我知道在log4j里面可以用配置文件决定log输出到什么地方,程序代码完全不用涉及log的目标,这样才灵活嘛。我不知道这个功能在java.util.logging里面怎么实现,有熟悉java.util.logging的人请赐教。我是很不喜欢“硬编码”的。

论坛徽章:
0
16 [报告]
发表于 2006-04-01 09:18 |只看该作者

  1. package source;

  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.util.logging.FileHandler;
  5. import java.util.logging.LogManager;
  6. import java.util.logging.Logger;

  7. public class LogTest {

  8.         /**
  9.          * @param args
  10.          */
  11.         public static void main(String[] args) {
  12.                 // TODO 自动生成方法存根

  13.                 // OutputStream out=new FileOutputStream("date/log.log");
  14.                  String logFile = null;// "data/log.log";
  15.                 String logConfig = "data/log.cfg";//这里是配置文件的位置
  16.                 try {
  17.                         LogManager logm = LogManager.getLogManager();
  18.                         logm.readConfiguration(new FileInputStream(logConfig));
  19.                         logFile=logm.getProperty("logpath");//使用getProperty得到log.log
  20.                         FileHandler flog = new FileHandler(logFile, true);
  21.                         Logger lg = Logger.getLogger("source.test");
  22.                         lg.addHandler(flog);
  23.                         lg.warning("i am warning log");
  24.                         lg.finer("i am finer log");
  25.                         lg.severe("i am severe log");
  26.                         lg.info("i am info log");

  27.                 } catch (IOException ex) {
  28.                         ex.printStackTrace();
  29.                 }

  30.         }
  31. }
复制代码


呵呵。这个方法好象不怎么好。但确实可以这么用。

[ 本帖最后由 carset 于 2006-4-1 09:49 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2006-04-01 12:51 |只看该作者
这么写不是很好,perryhg 的意思是在配置文件里就能决定 log 的目标,不仅是文件,也有可能是文件,网络,控制台。。。


答案是肯定的。。。。

论坛徽章:
0
18 [报告]
发表于 2006-04-01 13:03 |只看该作者
恩。我没有用过这些功能。不知道可不可以做到.

回头我看看文档去..

论坛徽章:
0
19 [报告]
发表于 2006-04-01 15:51 |只看该作者
其实相当简单。。。

FileHandler 或选 SocketHandler 或 ConsoleHandler 或直接使用 StreamHandler 自己搞一个。。。

格式的话有 XML 格式,Simple 格式都行。。。

如log文件太大,也可自动切割。。。

自己把log简单的封装起来,也可以实现系统的支持多种 log 组件。。。

java.util.logging 其实相当灵活

论坛徽章:
0
20 [报告]
发表于 2006-04-01 20:57 |只看该作者
原帖由 wobushiwo 于 2006-4-1 15:51 发表
其实相当简单。。。

FileHandler 或选 SocketHandler 或 ConsoleHandler 或直接使用 StreamHandler 自己搞一个。。。

格式的话有 XML 格式,Simple 格式都行。。。

如log文件太大,也可自动切割。。。

...

给你个例子吧,我的代码

  1. public class TestLog1 {
  2.         /**
  3.          * Logger for this class
  4.          */
  5.         private static final Log logger = LogFactory.getLog(TestLog1.class);

  6.         /**
  7.          * @param args
  8.          */
  9.         public static void main(String[] args) {
  10.                 // TODO Auto-generated method stub
  11.                 String s = "abc";

  12.                 if (logger.isDebugEnabled()) {
  13.                         logger.debug("main(String[]) - String s=" + s);
  14.                 }
  15.                
  16.                 logger.info("main(String[]) - String s=" + s);
  17.         }

  18. }
复制代码

代码中不含任何log输出目标,再看配置文件log4j.xml:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  3. <log4j:configuration>
  4.     <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
  5.         <param name="Target" value="System.out" />
  6.         <layout class="org.apache.log4j.PatternLayout">
  7.             <param name="ConversionPattern"
  8.               value="%-5p %c %x - %m%n" />
  9.         </layout>
  10.         <filter class="org.apache.log4j.varia.LevelRangeFilter">
  11.             <param name="LevelMin" value="DEBUG"/>
  12.             <param name="LevelMax" value="INFO"/>
  13.         </filter>
  14.     </appender>
  15.     <appender name="STDERR"  class="org.apache.log4j.ConsoleAppender">
  16.         <param name="Target" value="System.err" />
  17.         <layout class="org.apache.log4j.PatternLayout">
  18.             <param name="ConversionPattern"
  19.               value="%-5p %c %x - %m%n" />
  20.         </layout>
  21.         <filter class="org.apache.log4j.varia.LevelRangeFilter">
  22.             <param name="LevelMin" value="WARN"/>
  23.             <param name="LevelMax" value="FATAL"/>
  24.         </filter>
  25.     </appender>
  26.         <appender name="SYSLOG"  class="org.apache.log4j.net.SyslogAppender">
  27.         <param name="Threshold" value="WARN"/>
  28.                 <param name="syslogHost" value="localhost" />
  29.         <layout class="org.apache.log4j.PatternLayout">
  30.             <param name="ConversionPattern"
  31.               value="dynipscreen %-5p %c %x - %m%n" />
  32.         </layout>
  33.         <filter class="org.apache.log4j.varia.LevelRangeFilter">
  34.             <param name="LevelMin" value="INFO"/>
  35.             <param name="LevelMax" value="FATAL"/>
  36.         </filter>
  37.     </appender>
  38.     <appender name="CSF_FILE" class="org.apache.log4j.RollingFileAppender">
  39.         <param name="Threshold" value="NONE"/>
  40.         <param name="File" value="../logs/dynipscreen.log"/>
  41.         <param name="Append" value="true"/>
  42.         <param name="MaxFileSize" value="500KB"/>
  43.         <param name="MaxBackupIndex" value="5"/>
  44.         <layout class="org.apache.log4j.PatternLayout">
  45.                 <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
  46.         </layout>
  47.     </appender>

  48.     <!--                          -->
  49.     <!-- Declare the SMTPAppender -->
  50.     <!--                          -->
  51.     <appender name="EMAIL"  class="org.apache.log4j.net.SMTPAppender">
  52.                 <param name="Threshold" value="INFO"/>
  53.         <param name="BufferSize" value="128" />
  54.         <param name="SMTPHost" value="localhost" />
  55.         <param name="From" value="log4j@server5" />
  56.         <param name="To" value="perryabc@v66.org, perryddd@v66.org" />
  57.         <param name="Subject" value="[SMTPAppender] Application message4" />
  58.         <layout class="org.apache.log4j.PatternLayout">
  59.             <!--<param name="ConversionPattern"
  60.               value="[%d{ISO8601}]%n%n%-5p%n%n%c%n%n%m%n%n" />-->
  61.                         <param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m%n"/>
  62.         </layout>
  63.                 <!--
  64.         <filter class="org.apache.log4j.varia.LevelRangeFilter">
  65.             <param name="LevelMin" value="INFO"/>
  66.             <param name="LevelMax" value="FATAL"/>
  67.         </filter>
  68.                         -->
  69.     </appender>
  70.     <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
  71.         <appender-ref ref="STDOUT"/>
  72.         <appender-ref ref="STDERR"/>
  73.         <appender-ref ref="SYSLOG" />
  74.         <appender-ref ref="EMAIL" />
  75.         <appender-ref ref="CSF_FILE" />
  76.     </appender>

  77.     <category name="org.myproject" additivity="false">
  78.         <priority value="DEBUG"/>
  79.         <appender-ref ref="ASYNC"/>
  80.     </category>
  81.     <!--                           -->
  82.     <!-- setup log4j's root logger -->
  83.     <!--                           -->
  84.     <root>
  85.         <level value="INFO" />
  86.         <appender-ref ref="ASYNC"/>
  87.     </root>
  88. </log4j:configuration>
复制代码


log被发送到终端,发送到自动更新的文件组(大文件如何分割也是由log4j.xml决定,而不用写代码),发送到email,发送到syslog,都由log4j.xml来决定,而不是代码里面写定,这样,如果我要更改输出目标,只要更改log4j.xml就可以了,不用修改代码,更不用重新编译。我的问题是:java.util.logging有类似的实现方案吗?(我是说不用写需要编译的代码就可以实现,并且动态调整输出目标的方案)

找到了,看C:\Program Files\Java\jre1.5.0_06\lib\logging.properties 这个文件对这个虚拟机下所有文件都有效的,你可以复制这个文件到自己的目录,然后运行时输入 java -Djava.util.logging.config.file=myprojectlog.properties MyClass

但是感觉控制的粒度还是没有log4j细致。

[ 本帖最后由 perryhg 于 2006-4-1 21:14 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP