总结一下log4j 在项目中得使用
1.配置文件说明
#log4j中有五个级别的日志
#OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 依次降低
log4j.rootCategory=INFO,stdout,logfile,
#将等级为INFO的日志信息使用stdout logfile分别输出
#stdout configure
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#stdout 输出位置是控制台
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#stdout 输出的格式是自定义格式
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
#pattern布局就要指定的打印信息的具体格式ConversionPattern %d:时间 %p:输出日志等级 %c:通常就是所在类的全名 %m 输出代码中指定的消息 %n 输出一个回车换行符
log4j.appender.stdout.Target = System.out
#指定输出控制台
#logfile configure
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
#logfile 输出日志到文件 每天产生一个日志文件
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
#logfile 每天产生一个文件
log4j.appender.logfile.File= ../logs/dpsm.log
#logfile 输出文件的日志路径以及名称 这里可以自定义 上面的路径是相对于tomcat的bin文件夹
log4j.appender.logfile.Append=true
#logfile 内容追加
log4j.appender.logfile.Threshold=INFO
#只输出INFO级别以上的信息
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
#log4j 输出日志格式 自定义
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
2.在项目中如何使用
2.1 在web中使用 指定配置文件的路径
<context-param>
<param-name>log4jConfigLocation</param-name>
<!--param-name 设定上下文的参数名称。必须是唯一名称-->
<param-value>/WEB-INF/cfg/log4j.properties</param-value>
<!--param-value 设定的参数名称的值-->
</context-param>
<listener>
<listener-class> cn.datawin.listener.AnalysisListener</listener-class>
<!--监听器-->
</listener>
2.2 初始化过程:
- 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。
- 接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
- 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。
- 容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
- 在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
- 得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。
public class AnalysisListener implements ServletContextListener
{
public void contextInitialized(ServletContextEvent sce) {
Log4jWebConfigurer.initLogging(sce.getServletContext());
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
Log4jWebConfigurer.shutdownLogging(sce.getServletContext());
}
}
2.4 初始化完成后就可以在类中使用log4j输出日志
</pre><pre name="code" class="java">public class AttachDao extends AdvancedDao<Attach>
{
private static Logger logger = Logger.getLogger(AttachDao.class);
public AttachDao() {
super(Attach.class);
logger.info("初始化AttachDao");
logger.error("定义一个error级别的日志");
logger.info("定义一个info级别的日志");
logger.debug("定义debug级别的日志");
logger.warn("定义warn级别的日志");
}
/**
* 增加
*/
public String insertOne(Attach attach) {
logger.info("attachDao执行了insertOne方法");
this.insert(attach);
return attach.getId();
}
}
这样你可以在自己想要加日志的地方添加日志 并且设置日志级别 方便调试和发布