每周一技:日志

因为工作的原因,发现日志是必不可少的,这在以后的使用中,对调试,对技术支持起到非常重要的作用。

因为Blackberry的特殊性,一般人不会选在设备上调试,大多数人都选择在模拟器上开发。所以开发的程序一旦部署在设备上时,已经很难知道运行的状态。这个时候,好的日志就变得那么重要,如果好的话,可以减少几个round。

那么,如何写日志呢?

首先,需要熟悉Blackberry的日志API。还记得alt+lglg吗?这是一个不错的选择。

其次,该记录那些内容呢?答案也很简单,记录一些有用的信息,一般来说包括:

  • 记录程序执行的顺序
  • 记录程序执行的环境
  • 记录一些重要的条件
  • 记录一些警告,错误等信息

好的,接下来就是实现了,我们现在介绍如何将日志写到Blackberry的日志平台上。

直接贴代码:

/*
2	 * BlackberryLogger.java
3	 *
4	 * Copyright (C) Taiguo Zhang
5	 *
6	 * Author: Taigoo Zhang
7	 * Email: confach(#—)gmail.com
8	 */
9
10
11
12	import net.rim.device.api.system.EventLogger;
13	import java.io.UnsupportedEncodingException;
14
15
16	/**
17	 * The BlackberryLoggerto log all events
18	 */
19	public class BlackberryLogger{
20	    /**
21	     * The event logger guid
22	     */
23	    private long event_guid_id=0x4c9d3452d88022f2L;
24
25	    /**
26	     * The BlackberryLogger
27	     * To log all information..
28	     */
29	    public BlackberryLogger() {
30	       EventLogger.register(event_guid_id,"yourlogger",EventLogger.VIEWER_STRING);
31	     }
32
33	    /**
34	     * Get an instance of BlackberryLogger
35	     * @return  return an BlackberryLoggerobject.
36	     */
37	    public static BlackberryLogger getInstance()
38	    {
39	        return new BlackberryLogger();
40	    }
41
42	    /**
43	     * Log the information.
44	     * @param message The message you will log
45	     */
46	    public void log(String message)
47	    {
48	        String SEPERATOR_CHAR=" ";
49	        if(message==null||message.trim().equals("")) return;
50	        String new_str=DateUtils.now()+SEPERATOR_CHAR+"app:"+SEPERATOR_CHAR+message;
51	        System.out.println(new_str);
52	        try
53	        {
54	            new_str=new String(new_str.getBytes(),"UTF-8");
55	            byte[] msg_bytes =new_str.getBytes();
56	            EventLogger.logEvent(event_guid_id,msg_bytes);
57	        }
58	        catch(Exception ex)
59	        {
60	            System.err.println(ex);
61	        }
62	    }
63	}

是不是发现上面代码很简单呢?
调用也很简单:

BlackberryLogger.getInstance().log("hello);

再介绍一个小技巧,在抛出exeption时,为了定位到源代码的每一行,我们可以对exception打印一下,代码如下:

public static String getExceptionStackTrackMessage(Exception ex) {
		StringBuffer sb = new StringBuffer();
		 sb.append(ex.getMessage()).append("\r\n");
		StackTraceElement[] elems = ex.getStackTrace();
		for(StackTraceElement st : elems) {
			sb.append(st.toString()).append("\r\n");
		}
		return sb.toString();
	}

上面的技术非常简单,别看是小技术,但是用好了,对咱们的开发起到事半功倍的效果。

3条评论

  1. 请帮个忙。我的黑莓9530机器用着中国移动的全球通卡,包月里含WAP与NET。但是我这个机器不能用GOOGLEMAP。 但却可以用自带浏览器上网,UCWEB,QQ2008. 乐图也能用。service book用过网上的那个ServiceBook_Net_Wap_Email.ipd和serverbook-Garfiled_china mobile.ipd都不能用googlemap.我想可能是这个service book不能上net的原因。但是用ServiceBook_Net_Wap_Email.ipd后调到NETBROWSER上不了网。请帮个忙。QQ:270901106.

  2. Hi, 你好, 我叫无花, 看了你的几篇文章发现对我学习很有帮助, 能加你联系方式吗, 我的qq是616833302, 这年头开发黑莓不容易啊. 我最近也在学习黑莓的开发,并且要完成一些项目

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注