黑马程序员_Log4J
来源:互联网 发布:全文翻译软件 编辑:程序博客网 时间:2024/05/17 09:31
------- android培训、java培训、期待与您交流! ----------
Log4j
Log4j概述
Log4j能控制日志信息输送的目的地是控制台、文件、GUI组件、远程套接字服务器、NT的事件记录器、UNIX Syslog守护进程等。同时可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
Log4j中有三个主要的组件,它们分别是Logger、Appender和Layout。要在程序中使用Log4j,首先需要将commons-logging.jar和logging-log4j -1.2.9.jar导入到构建路径中。然后再将log4j.properties放到src根目录下。这样才能在程序中使用log4j
Logger的使用:
声明一个静态变量Logger logger = Logger.getLog("classname");导入Property或者XML配置文件,调用输出log信息的方法,如logger.debug("msg "),logger.info("msg")
Logger(日志)
Logger hierarchy:
自定义logger:通过Logger logger = Logger.getLogger(“com.foo”)返回名字为com.foo的Logger对象的引用,Logger是通过名字表明logger之间从属关系的,Logger名字体系描述如下:
比如,com.foo名字的logger是com.foo.Bar的父亲,com是com.foo.Bar的祖先
并且,Logger logger2 = Logger.getLogger(“com.foo”)返回的logger2和logger是同一个Logger对象,因为logger的名字相同,都为com.foo
Rootlogger:除了用户自定义的logger外,Log4j有rootlogger,通过Logger.getRootLogger获得,是所有logger的祖先,
Basic methods of Logger:
Logger Level:
Log4j中要输出的logger信息有级别,依次是DEBUG,INFO,WARN,ERROR,FATAL,级别的存在是为了更加方便的控制日志信息的输出,通常每个logger都分配一个level(创建的日志对象有level),如果某个logger没有指定等级,那么该logger会从已经分配了level里logger最近的祖先哪里继承level,具体描述如下:
因为root logger总是有loggerlevel,那么所有的logger总会有对应的level,默认情况下,root logger的level是DEBUG
下面举个例子:
首先我们定义了每个logger的级别,比如com.foo的级别为INFO(或者自己定义或者来自继承),而logging的请求同样有一个级别,比如请求的是:logger.warn(“msg”),并且注意级别的顺序:debug<info<warn<error<fatal,那么是否输出日志信息的规则是:requestlevel>=logging level,具体描述如下:
举个例子,如果com.foo.Bar的级别为INFO,那么:
logger.warn(“msg”):enable
logger.debug(“msg”):disable
Appender(输出目的地)
Appender则是用来指明将所有的log信息存放到什么地方,Log4j中支持多种appender,如console、files、GUI components、NT Event Loggers等,一个logger可以拥有多个Appender,并且enabled logging requests fora given logger will be forwarded to all the appenders in that logger as well asthe appenders higher in the hierarchy,如果com.foo有console appender,com.foo.Bar有file appender,那么com.foo.Bar既有console appender,又有file appender,因此appender也在logger的继承体系中,称为Appender Additivity,因为appender的继承源自于logger的继承,当然能够通过改变additivity flag为false,来取消appender的累加,具体描述如下:
比如,
那么,zzjie.crawl.parser的log信息只会输出到自身的appender,不再往上
例子:
Log4j提供的appender有以下几种格式,如表所示:
appender的格式含义
序号
配置
含义
1
org.apache.log4j.ConsoleAppender
控制台
2
org.apache.log4j.FileAppender
文件
3
org.apache.log4j.DailyRollingFileAppender
每天产生一个日志文件
4
org.apache.log4j.RollingFileAppender
文件大小到达指定尺寸的时候产生新文件
5
org.apache.log4j.WriterAppender
将日志信息以流格式发送到任意指定的地方
详细情况,查阅API文档
Layout(输出格式)
现在我们有了日志的级别,日志请求的级别,日志的输出目的地等,那么下一步需要明确日志的输出格式,Layout,注意layout一定是对应appender,而appender是在logger上面的,PatternLayout又能指定格式:
常见的Layout,具体查阅API文档:
需要特别说明的是PatternLayout,允许用户指定输出格式:
Log4j采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
1)%m表示输出代码中指定的消息;
2)%p表示输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
3)%r表示输出自应用启动到输出该log信息耗费的毫秒数;
4)%c表示输出所属的类目,通常就是所在类的全名;
5)%t表示输出产生该日志事件的线程名;
6)%n表示输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”;
7)%d表示输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日22:10:28;
8)%l表示输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
例子:
log4j.apender.stdout=org.apache.log.log4j.ConsoleAppdender
log4j.apender.stdout.layout=org.apache.log4j.PatternLayout
log4j.apender.stdout.layout.ConversionPattern=%c %-5p[%d{yyyy-MM-dd HH:mm:ss}] <%t> %m%n
Configuration(配置日志)
Log4j支持两种格式的配置文件:XML格式和Java的property格式
首先是Log4j默认的配置:BasicConfigurator.configure()
外面导入Property配置文件:PropertyConfigurator.configure(Stringpath)
外面导入XML配置文件:DOMConfigurator.configure(Stringpath)
配置文件基本格式:
options:(详细配置Google)
log4j.appender.appenderName.Append = true // 日志内容附加到文件末尾
例子:
首先是配置root,指定level = DEBUG和appender为控制台和文件
指定com.weibo.common.util和com.weibo.common.filters包里所有类的level
指定AccessTokenServiceImpl类的level和appender
- 黑马程序员_Log4J
- [日志_log4j] 总结
- 日志_log4j 总结
- 黑马程序员---------------
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- 黑马程序员
- Web数据挖掘小论文
- Linux 系统设置 ulimit 以及 Core文件的生成
- 黑马程序员_计算机编码知识困惑整理
- HBase条件查询(多条件查询)
- An intro to modern OpenGL. Chapter 1: The Graphics Pipelinehttp://duriansoftware.com/joe/An-intro-to
- 黑马程序员_Log4J
- IOS 不能触发didSelectRowAtIndexPath事件原因
- 最新spring4.0.3+hibernate4.3.5整合
- 【Android】如何在自定义View中设置自定义的属性
- C++字符串操作
- 为啥NSString的属性要用copy而不用retain
- java中的finally关键字
- sql plus命令大全
- 装饰模式--学习笔记