当前位置:  编程技术>java/j2ee
本页文章导读:
    ▪使用Log4j为项目配置日志输出应用详细总结及示例演示.       Log4j组件构成 Log4j由三个重要的组件构成:1.日志信息的优先级(Logger)2.日志信息的输出目的地(Appender)3.日志信息的输出格式(Layout)。概要:日志信息的优先级从高到低有ERROR、WARN、 IN.........
    ▪HBase的一些应用设计tip      1,对于HBase的存储设计,要考虑它的存储结构是:rowkey+columnFamily:columnQualifier+timestamp(version)+value = KeyValue in HBase,一个KeyValue依次按照rowkey,columnkey和timestamp有序。一个rowkey加一个column信息定.........
    ▪Java Object类      Object类  java.lang.Object  java.lang包在使用的时候无需显示导入,编译时由编译器自动导入。  Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类。  Object类是Java中唯一.........

[1]使用Log4j为项目配置日志输出应用详细总结及示例演示.
    来源:    发布时间: 2013-10-14

 

Log4j组件构成 

Log4j由三个重要的组件构成:

1.日志信息的优先级(Logger)

2.日志信息的输出目的地(Appender)

3.日志信息的输出格式(Layout)。

概要:

日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;

日志信息的输出目的地指定了日志将打印到控制台还是文件中;

而输出格式则控制了日志信息的显示内容。

 

Log4j介绍

  Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。log4j--log for java (java的日志) .

Log4j下载地址: http://logging.apache.org/log4j/2.x/download.html

 

 

Log4j配置文件的格式

Log4j支持两种配置文件格式:

1. XML格式的文件

2. properties格式的文件

也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。

 

Log4j定义配置文件

1.配置根Logger

其语法为: 

log4j.rootLogger = [ level ] , appenderName, appenderName, …

参数说明:  

level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。

Off: 最高等级,用于关闭所有日志记录

Fatal: 指出每个严重的错误事件将会导致应用程序的退出。

Error: 指出虽然发生错误事件,但仍然不影响系统的继续运行。

Warn: 表明会出现潜在的错误情形

Info: 一般用在粗粒度级别上,强调应用程序的运行全程

Debug: 一般和在粗粒度级别上,强调应用程序的运行全程。

All: 最低等级,用于打开所有日志记录。

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。

appenderName就是指日志信息输出到哪个地方,可以同时指定多个输出目的地。

 

2.配置日志信息输出目的地Appender

其语法为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1

...

log4j.appender.appenderName.option = valueN

Log4j提供的appender有以下几种:

  org.apache.log4j.ConsoleAppender(控制台)

  org.apache.log4j.FileAppender(文件)

  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)

  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

 

3.配置日志信息的格式

语法为:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1 = value1 …

lo
    
[2]HBase的一些应用设计tip
    来源:    发布时间: 2013-10-14
1,对于HBase的存储设计,要考虑它的存储结构是:rowkey+columnFamily:columnQualifier+timestamp(version)+value = KeyValue in HBase,一个KeyValue依次按照rowkey,columnkey和timestamp有序。一个rowkey加一个column信息定位了hbase表的一个逻辑的行结构。  

2,从逻辑存储结构到实际的物理存储结构要经历一个fold过程,所有的columnFamily下的内容被有序的合并,因为HBase把一个ColumnFamily存储为一个StoreFile。

3,把HBase的查询等价为一个逐层过滤的行为,那么在设计存储时就应该明白,使设计越趋向单一的keyvalue性能会越好;如果是因为复杂的业务逻辑导致查询需要确定rowkey、column、timestamp,甚至更夸张的是用到了HBase的Filter在server端做value的处理,那么整个性能会非常低。 

4,因此在表结构设计时,HBase里有tall narrow和flat wide两种设计模式,前者行多列少,整个表结构高且窄;后者行少列多,表结构平且宽;但是由于HBase只能在行的边界做split,因此如果选择flat wide的结构,那么在特殊行变的超级大(超过file或region的上限)时,那么这种行为会导致compaction,而这样做是要把row读内存的~~因此,强烈推荐使用tall narrow模式设计表结构,这样结构更趋近于keyvalue,性能更好。 

5,一种优雅的行设计叫做partial row scan,我们一般rowkey会设计为<key1>-<key2>-<key3>...,每个key都是查询条件,中间用某种分隔符分开,对于只想查key1的所有这样的情况,在不使用filter的情况下(更高性能),我们可以为每个key设定一个起始和结束的值,比如key1作为开始,key1+1作为结束,这样scan的时候可以通过设定start row和stop row就能查到所有的key1的value,同理迭代,每个子key都可以这样被设计到rowkey中。 

6,对于分页查询,推荐的设计方式也不是利用filter,而是在scan中通过offset和limit的设定来模拟类似RDBMS的分页。具体过程就是首先定位start row,接着跳过offset行,读取limit行,最后关闭scan,整个流程结束。 

7,对于带有时间范围的查询,一种设计是把时间放到一个key的位置,这样设计有个弊端就是查询时一定要先知道查询哪个维度的时间范围值,而不能直接通过时间查询所有维度的值;另一种设计是把timestamp放到前面,同时利用hashcode或者MD5这样的形式将其打散,这样对于实时的时序数据,因为将其打散导致自动分到其他region可以提供更好的并发写优势。 

8,对于读写的平衡,下面这张图更好的说明了key的设计:salting等价于hash,promoted等价于在key中加入其他维度,而random就是MD这样的形式了。
 

9,还有一种高级的设计方式是利用column来当做RDBMS类似二级索引的应用设计,rowkey的存储达到一定程度后,利用column的有序,完成类似索引的设计,比如,一个CF叫做data存放数据本身,ColumnQualifier是一个MD5形式的index,而value是实际的数据;再建一个CF叫做index存储刚才的MD5,这个index的CF的ColumnQualifier是真正的索引字段(比如名字或者任意的表字段,这样可以允许多个),而value是这个索引字段的MD5。每次查询时就可以先在index里找到这个索引(查询条件不同,选择的索引字段不同),然后利用这个索引到data里找到数据,两次查询实现真正的复杂条件业务查询。

10,实现二级索引还有其他途径,
比如:
1,客户端控制,即一次读取将所有数据取回,在客户端做各种过滤操作,优点自然是控制力比较强,但是缺点在性能和一致性的保证上;
2,Indexed-Transactional HBase,这是个开源项目,扩展了HBase,在客户端和服务端加入了扩展实现了事务和二级索引;
3,Indexed-HBase;
4,Coprocessor。 

11,HBase集成搜索的方式有多种:1,客户端控制,同上;2,Lucene;3,HBasene,4,Coprocessor。 

12,HBase集成事务的方式:1,ITHBase;2,ZooKeeper,通过分布式锁。 

13,timestamp虽然叫这个名字,但是完全可以存放任何内容来形成用户自定义的版本信息。


paulwong 2013-01-02 23:09 发表评论

    
[3]Java Object类
    来源: ▪java之this关键字用法实例分析 iis7站长之家   发布时间: 2013-10-14
Object类

  java.lang.Object

  java.lang包在使用的时候无需显示导入,编译时由编译器自动导入。

  Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类。

  Object类是Java中唯一没有父类的类。

  其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法。

 

Object类中的方法

  构造方法:public Object()

  文档中的类概览:

 

  Java中的每个类都具有定义在Object类中的这些方法。

 

protected Object clone()

  Creates and returns a copy of this object.

  Object类中的说明是:

  protected Object clone()

  throws CloneNotSupportedException

  这个方法比较特殊:

  首先,使用这个方法的类必须实现java.lang.Cloneable接口,否则会抛出CloneNotSupportedException异常。

  Cloneable接口中不包含任何方法,所以实现它时只要在类声明中加上implements语句即可。

  第二个比较特殊的地方在于这个方法是protected修饰的,覆写clone()方法的时候需要写成public,才能让类外部的代码调用。

 

boolean equals(Object obj)

  Indicates whether some other object is "equal to" this one.

  “==”运算符判断两个引用是否指向同一个对象。

  对于Object类的equals()方法来说,它判断调用equals()方法的引用于传进来的引用是否一致,即这两个引用是否指向的是同一个对象。

  Object类中的equals()方法如下:

public boolean equals(Object obj)
{
return (this == obj);
}

 

  即Object类中的equals()方法等价于==。

  只有当继承Object的类覆写(override)了equals()方法之后,继承类实现了用equals()方法比较两个对象是否相等,才可以说equals()方法与==的不同。

 

int hashCode()

  Returns a hash code value for the object.

  当你覆写(override)了equals()方法之后,必须也覆写hashCode()方法。

  这个方法返回一个整型值(hash code value),如果两个对象被equals()方法判断为相等,那么它们就应该拥有同样的hash code。

 

String toString()

  Returns a string representation of the object.

  当打印引用,如调用System.out.println()时,会自动调用对象的toString()方法,打印出引用所指的对象的toString()方法的返回值,因为每个类都直接或间接地继承自Object,因此每个类都有toString()方法。

  Object类中的toString()方法定义如下:

 

public String toString()
{
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

 

参考资料推荐

  官方文档和jdk中的源代码src。

  帮助格式的文档下载:http://www.allimant.org/javadoc/index.php

  推荐皮皮书屋:http://www.ppurl.com/

本文链接


    
最新技术文章:
▪Java中使用开源库JSoup解析HTML文件实例
▪Java函数式编程(一):你好,Lambda表达式
▪Java函数式编程(二):集合的使用
▪Java函数式编程(三):列表的转化
▪Java函数式编程(四):在集合中查找元素
▪Java函数式编程(五):闭包
▪Java函数式编程(六):Optional
▪Java函数式编程(七):MapReduce
▪Java函数式编程(八):字符串及方法引用
▪Java函数式编程(九):Comparator
▪Java函数式编程(十):收集器
▪Java函数式编程(十一):遍历目录
▪Java函数式编程(十二):监控文件修改
▪Java编程中的一些常见问题汇总
▪java之super关键字用法实例解析
▪java生成jar包的方法
▪java之static关键字用法实例解析
▪java方法重写实例分析
▪java之this关键字用法实例分析
▪Java中避免空指针异常的方法
▪Java Web使用简单的批处理操作(记事本+Tomcat)
▪java对象转型实例分析
▪java之Object类用法实例
▪java继承中的构造方法实例解析
▪Java String字符串和Unicode字符相互转换代码
▪Java注解之Retention、Documented、Inherited介绍
▪Java中对AtomicInteger和int值在多线程下递增操作...
▪Java设计模式之装饰者模式详解和代码实例
▪Java8新特性之字符串去重介绍
▪Java网络编程基础教程之Socket入门实例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3