1 log4j
1.1 日志级别
1.2 配置文件
 记录器
例如:log4j.rootLogger=info, stdout 输出源:
确定输出位置:例如文件、控制台等 格式:log4j.appender.源名称 = 实现类  实现类是log4j规定的,常用的如下所示的两个
例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender
输出源属性
格式:log4j.appender.名称.属性=值
例如:log4j.appender.stdout.Target=System.out
System.out输出的是黑色文字信息,System.err输出的是红色文字信息
    布局
格式:log4j.appender.源名称.layout=实现类
例如:log4j.appender.stdout.layout=org.apache.log4j.PatternLayout(相当于固定值)
 布局风格  格式:log4j.appender.名称.layout.ConversionPattern=风格
例子 列出logger名字空log4j配置文件参数举例  输出显示媒介  间的全称,如果加上假设当前logger名字空间是“a.b.c” %c  {<层数>}表示列出%c a.b.c 从最内层算起的指%c{2} b.c 定层数的名字空间 %20c (若名字空间长度小于20,则左边用参数 说明 %C  %d  %F  %l  %L  %m  %M  %n  %p  %r  %t  %x  %X  空格填充) (若名字空间长度小于20,则右边用%-20c 空格填充) (若名字空间长度超过30,截去多余%.30c 字符) (若名字空间长度小于20,则左边用%20.30c 空格填充;若名字空间长度超过30,截去多余字符) (若名字空间长度小于20,则右边用%-20.30c 空格填充;若名字空间长度超过30,截去多余字符) 列出调用logger的假设当前类是“org.apache.xyz.SomeClass” 类的全名(包含包路%C org.apache.xyz.SomeClass 径) %C{2} xyz.SomeClass 2005/10/12 22:23:30,117 显示日志记录时间,%d{yyyy/MM/ddHH:mm:ss,SSS} 22:23:30,117 {<日期格式>}使用%d{ABSOLUTE} ISO8601定义的日期%d{DATE} 12 Oct 2005 22:23:30,117 格式 %d{ISO8601} 2005-10-12 22:23:30,117 显示调用logger的%F MyClass.java 源文件名 输出日志事件的发生位置,包括类目%l MyClass.main(MyClass.java:129) 名、发生的线程,以及在代码中的行数 显示调用logger的%L 129 代码行 显示输出消息 %m This is a message for debug. 显示调用logger的%M main 方法名 当前平台下的换行Windows平台下表示rn %n 符 UNIX平台下表示n 显示该条日志的优%p INFO 先级 显示从程序启动时到记录该条日志时%r 1215 已经经过的毫秒数 输出产生该日志事%t MyClass 件的线程名 假设某程序调用顺序是MyApp调用com.foo.Bar 按NDC(Nested Diagnostic MyApp - Call com.foo.Bar. Context,线程堆栈)%c %x - %m%n com.foo.Bar - Log in Bar 顺序输出日志 MyApp - Return to MyApp. 按MDC(Mapped Diagnostic %X{5} (记录代号为5的客户端的日志) Context,线程映射表)输出日志。通常用于多个客户端连接同一台服务器,方便服务器区分是那个客户端访问留下来的日志。 %%  显示一个百分号 %%
%         1.3 web项目
1.把log4j.jar放到lib下就会自动加载寻找log4j.properties文件
ava虚拟机加载log4j的类(LogManager.class)后,执行静态代码块,这个类中的静态代码块,会load log4j的配置文件,依次加载log4j.xml,log4j.properties
部分代码:
Hierarchy h = new Hierarchy(new RootLogger((Level) Level.DEBUG)); repositorySelector = new DefaultRepositorySelector(h);
/** Search for the properties file log4j.properties in the CLASSPATH.  */
String override =OptionConverter.getSystemProperty(DEFAULT_INIT_OVERRIDE_KEY,null); static public final String DEFAULT_CONFIGURATION_FILE = \"log4j.properties\";  static final String DEFAULT_XML_CONFIGURATION_FILE = \"log4j.xml\";   if(configurationOptionStr == null) {
url = Loader.getResource(DEFAULT_XML_CONFIGURATION_FILE);  if(url == null) {
url = Loader.getResource(DEFAULT_CONFIGURATION_FILE);
}
获取系统属性,看是否用户设置了override。默认是不设置的。
如果确实没有设置,那么尝试找一下,有没有log4j.xml,有则加载。 如果还没有,那么尝试找一下,有没有log4j.properites,有则加载,
所以你把log4j.xml或log4j.properties放在这些目录下,那么log4j会“自动去加载”到,不用程序里手工写加载代码了。
2.log4j.properties 文件不会自动加载,需要手动加载
PropertyConfigurator.configure(配置文件);
String log4jPath = ApplicationDispatchServlet.class.getResource(\"/\").getPath() + \"config/logs\";          List files = FileUtil.listFile(new File(log4jPath), \"properties\if ((files == null) || (files.size() == 0)){            log.info(\"没有发现Log4j配置文件.\"); return;          }
for (File file : files) {              //加载配置文件
PropertyConfigurator.configure(file.getPath());
}
log.info(\"加载Log4j配置文件完成.\");
3.web.xml中配置,spring通过org.springframework.web.util.WebAppRootListener这个来运行时的项目路径。 但是如果在web.xml中已经配置了 org.springframework.web.util.Log4jConfigListener这个,
则不需要配置WebAppRootListener了。因为Log4jConfigListener已经包含了WebAppRootListener的功能 一般配置类型下面的例子:        org.springframework.web.util.Log4jConfigListener  
   log4jConfigLocation  classpath:log4j.properties 
     log4jRefreshInterval   60000  
如果有多个web应用,怕webapp.root变量重复,可以在context-param里定义webAppRootKey webAppRootKey webapp.root 
\"webapp.root\"这个字符串可以随便写任何字符串。如果不配置默认值是\"webapp.root\"。配置各自web应用的日志文件路径
可以用System.getProperty(\"webapp.root\")来动态获项目的运行路径。 一般返回结果例如:/usr/local/tomcat6/webapps/项目名
1.4 给指定的包设置级别
log4j.logger.com.foo=WARN
properties文件
#info级别,2个输出源(名字可以自定义),后面的属性与该名字保持一致即可 log4j.rootLogger=INFO,stdout,dailyFile #控制台输出 log4j.appender.stdout=org.apache.log4j.ConsoleAppender #布局 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #风格格式 log4j.appender.stdout.layout.ConversionPattern=%d%p[%c]-%m%n  # 每天产生一个日志文件(dailyFile) log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender #当天的日志文件全路径 log4j.appender.dailyFile.File=/home/bank/apache-tomcat-7.0.72/logs/fhzc-app-system.log #服务器启动日志是追加,false:服务器启动后会生成日志文件把老的覆盖掉 log4j.appender.dailyFile.Append=true #日志文件格式 log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout log4j.appender.dailyFile.layout.ConversionPattern=%-d{yyyy-MM-ddHH\\:mm\\:ss}[%c]-[%p][%t](%F\\:%L)->%m%n log4j.appender.dailyFile.Threshold=DEBUG #设置每天生成一个文件名后添加的名称,备份名称:年月日.log  log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd'.log'  #指定的包设置级别 log4j.logger.com.ibatis=ERROR log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=ERROR log4j.logger.com.ibatis.common.jdbc.ScriptRunner=ERROR log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=ERROR log4j.logger.java.sql.Connection=INFO log4j.logger.java.sql.Statement=INFO log4j.logger.java.sql.PreparedStatement=INFO log4j.logger.org.codehaus.jackson=INFO log4j.logger.org.codehaus=INFO  log4j.logger.org.springframework = ERROR log4j.logger.org.mybatis=ERROR log4j.logger.org.springframework.web.bind.annotation=ERROR   Xml文件配置