log4j,slf4j (日志记录工具)
来源:互联网 发布:dijkstra算法证明 编辑:程序博客网 时间:2024/05/16 12:06
一个logger对应着若干个appender和一个日志级别。
一个appender对应着一个输出位置与格式。
1.获取
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>
需要的jar包、log4j.properties文件等项目结构见图1。
图1 log4j.properties文件的默认位置
也可以自己指定配置文件路径,见下;
void org.apache.log4j.PropertyConfigurator.configure(String configFilename)
2.日志格式
layout指定了布局与内容。常用的见下表:
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句,处于它所在的类以及第几行
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
如下行配置的显示效果见下下行;
log4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p]-[%l] %m%n
2015-08-03 10:52:23 [com.ctrip.search.antibot.esper.worker.RuleWorker]-[DEBUG]-[com.ctrip.search.antibot.esper.worker.RuleWorker.modifyAntibotEplTable(RuleWorker.java:54)] 日志具体内容
3.常用函数
void com.ctrip.search.logging.ESLogger.error(String msg, Object... params)
用于记录string。
void com.ctrip.search.logging.ESLogger.error(String msg,Throwablecause, Object... params)
我们catch(Exception e)到的异常都是Throwable类型的,若想打印错误栈信息,可将e放入此函数的第二个实参位置上,log4j就帮我们打印调用栈了。
比如logger.error(e,e),就等价于logger.error(e.toString(),e),就等价于logger.error(e.getMessage(),e);。
注意:若程序抛出了RuntimeException e,而我们没有try{}catch{ logger.error(e,e)},那么日志中就没有这个异常信息。所以启动脚本一般会这么写;
4.例子
log4j.properties文件内容见下:
#可以设置级别:debug>info>error#debug:显示debug、info、error#info:显示info、error#error:只error#log4j.rootLogger=debug,appender1#输出到多个目的地log4j.rootLogger=info,appender1,appender2#log4j.rootLogger=error,appender1#输出到控制台log4j.appender.appender1=org.apache.log4j.ConsoleAppenderlog4j.appender.appender1.layout=org.apache.log4j.PatternLayoutlog4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]-[%l] %m%n #输出到文件,每天一个文件log4j.appender.appender2=org.apache.log4j.DailyRollingFileAppender#指定输出文件,${catalina.home}为tomcat启动时设置的变量,就是tomcat工作目录log4j.appender.appender2.file=${catalina.home}/logs/meWeb.loglog4j.appender.appender2.layout=org.apache.log4j.PatternLayoutlog4j.appender.appender2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]-[%l] %m%n对应的效果见图4-1:
5.多个logger
5.1 指定logger名字
log4j.logger.myLogger=info,appender3#若不加这一行,rootLogger同样会记载此logger的日志log4j.additivity.myLogger=falselog4j.appender.appender3=org.apache.log4j.ConsoleAppenderlog4j.appender.appender3.layout=org.apache.log4j.TTCCLayout对应的java语句见下:
static final Logger myLogger = LoggerFactory.getLogger("myLogger");
5.2 限定包名
如 log4j.logger.com.likeyichu.proa=info,myAppender6.自定义appender
#use own appenderlog4j.rootLogger = INFO,YICHUlog4j.appender.YICHU = com.yichudu.logger.appender.YichuAppenderlog4j.appender.YICHU.layout = org.apache.log4j.PatternLayoutlog4j.appender.YICHU.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss}][%p][%c]%m%n
7.指定配置文件
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:service.xml</param-value></context-param> <context-param><param-name>log4jConfigLocation</param-name><param-value>/WEB-INF/log4j.xml</param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener> <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
8. slf4j
获取
<!--以与log4j搭配为例--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.7</version></dependency>
slf4j,Simple Logging Facade for Java,用于java的简单日志门面系统。它不是具体的日志记录工具,类似于jdbc,提供了日志记录的统一接口。
使用哪种工具实现日志记录,不需要代码指定,只要将与你打算使用的日志系统对应的jar包加入到项目中,SLF4J就会自动选择使用你加入的那种日志系统。
slf4j中,使用下行语句得到logger:
Logger org.slf4j.LoggerFactory.getLogger(Class clazz)
- log4j,slf4j (日志记录工具)
- 日志记录相关:log4j+slf4j+commons-logging
- 使用slf4j和log4j记录日志
- 日志记录方法---SLF4J和Log4j
- Java 日志工具类SLF4J与Log4J
- Java日志工具:Log4J, JCL, SLF4J
- 使用日志记录工具log4j
- 开发日志记录工具log4j
- java日志(slf4j, log4j, jdk4j,slf4j_simple,)
- 程序日志SLF4J+Log4j(介绍)
- log4j+slf4j日志系统
- SLF4J+Log4j 日志配置
- 折腾 slf4j+log4j 日志
- 【日志系统】SLF4j&Log4j
- java 日志记录使用slf4j优于log4j的原因
- Intellij idea中使用SLF4J+log4j做日志记录
- slf4j+log4j在Java中实现日志记录
- 日志记录(log4j)
- sqlplus中超级好用的小命令
- 数据在Access与Office组件之间如何自由流动
- Android 中Animations的使用 代码篇
- 解决Ruby “Unable to require openssl"问题
- 正则清除HTML标签但保留其中一部分标签
- log4j,slf4j (日志记录工具)
- java利用POI操作EXCEL(基于反射)
- ios判断字符串里面是否有分号,逗号,破折号,句号,省略号
- iCalendar
- Java——线程池的简单实例
- 使用 watchdog 构建高可用性的 Linux 系统及应用
- Async详解之一:流程控制
- Rsync+inotify实时同步笔记
- ViewPager使用总结之基本使用