日志和业务联系在一块的时侯怎么办? 比如,记下登录用户ID,串起前后日志;不同的业务模块记录在不同的日志文件里。SLF4J 解决这两件事很容易。
记录上下文相关信息可以用MDC,MDC 的用法非常简单。首先在logback.xml 里面用%X{your_key} 标记需要记录上下文信息。然后在代码中用MDC 记录your_key 的值。举例:
T.java: MDC.put("your_key", "your_value"); logger.info("Hello World"); logback.xml <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss} %X{your_key} %msg%n</pattern> </layout> output: 2012-12-17 23:20:45 your_value Hello World
区分不同的模块的日志,可以在getLogger() 的时侯根据logger 的名字拿到不同的logger-> appender 。不过这条路略微有点土。用SLF4J 的marker 可以相对优雅的解决这个问题。可惜,目前只有logback 才支持。
如果把所有的日志混在一起记录,只是用关键字做区分,很简单,之需要在代码中声明marker,然后在logback 中配置就可以了。举例:
T.java: MDC.put("your_key", "your_value"); logger.info("Hello World"); logback.xml <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss} %X{your_key} %msg%n</pattern> </layout> output: 2012-12-17 23:20:45 your_value [...]
Lite-Mongo 简单的MongoDB Java Driver 封装最近在折腾Mongo,觉得官方的Java API 挺悲催的,就跟直接用JDBC 玩RDBMS 一样。于是动手折腾了一个简单的 Lite-Mongo ,主要就在MongoDB的Java Driver 上薄薄的封装一层,简化MongoDB 的使用。Lite-Mongo 的思路是这样的,Scanner – Factory – Dao(Param) – Entity – Field 。告诉Scanner 扫描Dao,然后从Factory 拿到Dao 实例,Dao 和 Entity 关联,在Entity 中指定各个Field 对用MongoDB 的Collection中Document 的Field。最主要的就是不用自己实现Dao,只需要定义好interface。Lite-Mongo 通过反射,在运行时组织与MongoDB 交互的行为。
目前典型的用法可以参考源代码中的DaoTest.java 。主要是以下三个步骤:
DaoScanner.scan(PersonDao.class); PersonDao dao = DaoFactory.get(PersonDao.class); Person p = dao.get(“ttttt”, 111);
Lite-Mongo 提供了几个基础的Annotation,用来构建应用的数据访问层(Dao)。首先是@Entity 用来标记实体,并与MongoDB中的Collection 关联。@Field 标识实体中的属性,Document 中的字段。@Dao 标识数据访问接口,并关联到实体。 [...]
理想的手机通讯录是个什么样子?
上一篇B文第一条说手机会是社交网络的中心节点。这篇B文就说说我为什么觉得她应该是这个中心节点,以及她应该长成什么样子。
所谓的SNS 社交网络,其实只不过是人们的社交活动,从现实到网络的一种表现方式。SNS 的流行,是因为越来越多的人能够越来越方便的连接到网络。随着smart phone的普及,各个SNS 应用都推出了手机版本。为什么?因为手机是最便捷的网络接入方式。她够小巧,可以方便地装在口袋里随身携带。她够直接,只要有3G信号的地方就能接入。她够快速,现在smart phone的平均水平已经在1+1+1之上了。她够全面,联系人的各种联系方式都能在手机上存储。
除了SNS 这种半虚拟的社交方式,手机还是完全真实的社交活动的节点。在网络不存在的时候,人们用书信,用电报,用电话联系着。他们的生命周期从几千年几百年到最近几十年,人们一直追求的就是更快速直接的与人沟通。书信现在有了Email和IM,电报的方式已经被抛弃了,电话从固定电话发展到现在的手机。我想象不出将来会有什么东西取代手机。在我看来手机的形式基本已经到了极限。打电话、发短信、Email、IM和SNS,她都可以很方便的解决。也行将来人们的联系方式可以更简化,但是估计不会有比手机更便于携带的工具了。嗯,我得说,天线宝宝的帽子其实也是个好东西。
现有的手机通讯录只是存储了个人的信息。从老的feature phone 到现在的smart phone 逐渐发展中,有一点已经很明显了,就是个人的联系方式增多,对应的通讯录存储的信息也增多,固话,移动电话,Email,IM 等等。但其实在通讯录中这些信息都是孤立的。Feature phone从通讯录中只能打电话发短信。当然,必须得承认在今天的smart phone时代,这点正在发生变化。以我的Android手机为例,在通讯录中已经可以直接调用Email发送功能了。但是其他的还不直接联系起来。当然这跟各个IM、SNS都几乎采用不同的协议有关系。然而,如果采用插件的方式,允许第三方开发与IM、SNS对应的插件,又会如何呢?
我观察过Android 和iOS 两种最流行的手机操作系统。至少在这两种系统中,各个交流工具之间是互相孤立的。这里的交流工具指电话、短信、Email、IM和SNS所有的沟通方式。比如,在通话记录中,没有办法知道我是否给刚打过电话的人发过短信。在IM 里,我也不知道对方是否在SNS 中给我留下过什么。腾讯的QQ 做的不错,她的客户端能提醒联系人通过各种方式留下的信息。腾讯有一个大的数据平台,她可以知道各种信息。我有一个智能手机,我也需要知道各种信息。
智能手机其实已经能够知道各种信息了。电话短信不用说了,是个手机就行。安装各种应用也能支持Email、IM和SNS 这类应用。但问题是,我很懒,我也不会自己装那么多乱七八糟的应用;我的朋友很多,他们都有各自喜欢的表达自己向外界传递信息的方式。现在的矛盾是,个人懒惰的天性和众多联系人诸多的喜好之间的矛盾。我只想每次直接打开一个应用,在里面就能看见所有联系人,不论是虚拟的还是现实的,他们最近的动向;以及我和他们之间的联系。
每个人的朋友都很多,但其实这些虚拟的或者现实的朋友,他们与你的联系方式一般不会超过三种以上。现实的朋友一般是电话短信,接触网络多的,可能会是电话和IM。虚拟的朋友一般是IM和SNS,关系亲密的,可能会加上电话。商务关系一般是电话和Email,可能会有CRM通知。所以在单一应用中组织三种联系来源是有合理性的,而且从技术上来说完全有可能的,并不会显得特别复杂。可能存在的问题是,由于生物多样性,在总数上,这个信息来源可能不是收敛的。但是,滚滚历史的车轮,真扯,是主流力量推动的。所谓主流,其实也就那么几种。所以基本上来说,这事靠谱。
我被自己说服了,我打算先做出这么个东西来看看,先从Android开始,刚买了个水货,不能白花银子。如果你也感兴趣,可以联系我。
Recent Posts
Recent Comments
- Ken on SLF4J MDC and Marker
- Ken on SLF4J MDC and Marker
Archives
- December 2011 (1)
- August 2011 (1)
- April 2011 (1)
- March 2011 (1)
- January 2011 (14)


