9月4日培训日记

1。JDK中的标准日志记录模块
a)为什么要对记录的信息分级?应用程序可以调用Logger对象产生各种级别的日志消息,Logger对象本身有一个开关控制其向外输出哪些级别的消息。
b)Logger对象输出的消息交给谁去处理?以什么样的格式显示出来?
c)Handler对象的作用?Formatter对象的作用?
d)Logger对象的所有信息都可以通过配置文件来进行设置。看LogManager的帮助可以知道如何设置配置文件。
e)在一个应用程序中也可以创建多个Logger对象,Logger对象之间会根据名称形成一种父子关系,一个Logger对象会继承父级Logger对象的handler和level设置,handler设置是叠加关系,而level设置是覆盖关系。

2。Log4j日志记录模块
a)与JDK中提供的标准日志记录模块一样,在一个应用程序中也可以创建多个log4j的Logger对象,Logger对象之间会根据名称形成一种父子关系。
b)Appender与Handler对应,Layout与Formatter对应,一个Logger对象会继承父级Logger对象的Appender和level设置,Appender设置是叠加关系,而level设置是覆盖关系。
c)与标准日志记录模块不一样,log4j中的根Logger对象没有名称,只能通过Logger.getRootLogger方法获得。
d)log4j中的日志级别:DEBUG,INFO,WARN,ERROR,FATAL,查看log4j的javadoc,在Level类中可以看到它们的常量定义。每个Logger对象都有一个输出级别,如果没有明确设置,则继承父代logger对象的级别。
e)log4j默认不为根logger对象设置任何Appender,BasicConfigurator为根Logger对象设置一个ConsoleAppender,并采用PatternLayout,具体模式可以看BasicConfigurator.configure()方法的帮助文档。
f)log4j的配置文件比JDK的标准日志记录模块的配置文件更复杂,可以采用Properties和XML两种格式。查看PropertyConfigurator和DOMConfigurator类的API帮助文档,可以获得详细的信息。举例如下:
log4j.rootLogger=[level], appenderName, appenderName, ...
log4j.logger.logger_name=[level|INHERITED|NULL], appenderName, appenderName, ...
# For appender named appenderName, set its class.
# Note: The appender name can contain dots.
log4j.appender.appenderName=fully.qualified.name.of.appender.class

# Set appender specific options.
log4j.appender.appenderName.option1=value1
...
log4j.appender.appenderName.optionN=valueN
log4j.appender.appenderName.layout=fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1=value1
....
log4j.appender.appenderName.layout.optionN=valueN

# Logger definitions:
# The SECURITY logger inherits is level from root. However, it's output
# will go to A1 appender defined above. It's additivity is non-cumulative.
log4j.logger.SECURITY=INHERIT, A1
log4j.additivity.SECURITY=false
g)看DOMConfigurator帮助文档中的DTD,引导学员编写XML格式的配置文件。配置root,logger,appender,layout,appender和layout下面都有param。看org.apache.log4j.xml.examples这个包下面的文档,可以看到xml格式的例子。
h)可以log4j.properties和log4j.xml文件放置在CLASSPATH根目录下。

3.commons logging的作用。
a)Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口,兼顾轻量级和不依赖于具体的日志实现工具。 它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。
b)调用LogFactory的到Log对象,注意不是Logger对象。
c)commons logging.会合理地猜测你喜欢的日志工具,然后进行自我设置,用户根本不需要做任何设置。查看帮助文档,可以看到LogFactory去发现并决定使用哪个日志工具的步骤。

4。想想“全局唯一的X实例对象在X类加载时被创建”的代码是怎样的?
org.it315;
class X
{
static {X x = new X();}
private X(){};
public X getX{return x};
}
即使程序中只有如下一句,也回导致类的加载:
X x=null;
5。小知识
a)使用System.out.printf("%1:%2",name,age)代替System.out.print(name + ":" + age);
b)用eclipse向cvs上传和下载工程
c)在java程序中使用相对路径的问题。
作业:
a)根Logger对象总是有一个级别,实验看看(看输出的log信息和getLevel方法),级别是多少?
b)一个Logger对象的祖先可以比它后出现,那该Logger对象怎样继承后出现后的祖先的level和appender呢
c)分析log4j源程序,研究其如何装配Logger对象,分析其(或其他开源项目)目录结构来了解如何为ant规划项目的目录结构。
问题:
a)eclipse怎么把他调用的外部jar文件集中复制到发布程序下的一个lib目录中,怎样将带目录的资源复制到发布程序的相应目录中。
b)cvs如何防止多人修改同一个文件的细节。

你可能感兴趣的:(eclipse,jdk,log4j,Security,cvs)