log4j和slf4j的使用

1、下载log4j-1.2.17.zip包,把log4j-1.2.17.jar导入到工程当中。

2、配置工程支持log4j,在本工程的web.xml中添加如下代码(测试后,其实可以不写)

  <context-param>
  	<param-name>log4jConfigLocation</param-name>
  	<param-value>WEB-INF/log4j.properties</param-value>
  </context-param>

3、编写log4j配置文件log4j.properties.放在src目录中。示例如下(在log4j-1.2.17.zip中有示例配置文件可以参考里面的饿)

log4j.rootLogger=debug,appender1,appender2
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout
log4j.appender.appender2=org.apache.log4j.FileAppender
log4j.appender.appender2.File=c:/logs/mylog.log
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=[%d{yy-MM-dd HH:mm:ss:SSS}] %m%n

4.现在可以使用log4j功能了。在程序中使用的示例如下

package org.crazyit.app.log;
import org.apache.log4j.Logger;
public class TestLog {
public static void main(String[] args) {
Logger log=Logger.getLogger(TestLog.class);
log.debug("i am log4j");
}
}

5、也可以通过springaop的切入点定义的类来加入日志功能。

package org.crazyit.app.service;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class BeforeAdviceTest {
@Before(value="testPointCut.myPointcut()")
public void authority(JoinPoint jp)
{
Logger log = Logger.getLogger(BeforeAdviceTest.class);
log.debug("我是log4j的输出");
System.out.println(jp.getTarget().getClass()+"."+jp.getSignature().getName()+"方法的权限检查");
}
}

6.如果要结合slf4j,只要把对应的jar包放进去就可以了,不需要额外的配置。

slf4j-api-1.6.1.jar

slf4j-log4j12-1.6.1.jar

log4j-1.2.17.jar

7.log4j.propertiess放置绝对路径是最保险的一种方法。如果想放在对应工程的WEB-INF下,而且工程考到其他的地方不用改变,那么就使用相对路径。步骤比较繁琐:

思路是:写一个servlet,让它在tomcat启动时初始化,在servlet中初始化一个系统变量,把工程的目录存储在系统变量中,然后在log4j.properties文件中引用此系统变量。

1)新建一个servlet,继承自HttpServlet,在其中设置java系统变量。(因为log4j配置文件中使用的变量为java的系统变量而不是环境变量)

package org.crazyit.app.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.crazyit.app.service.BeforeAdviceTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AutoRunServlet extends HttpServlet {
/**
 * Constructor of the object.
 */
public AutoRunServlet() {
super();
}
/**
 * Destruction of the servlet. <br>
 */
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Logger log = LoggerFactory.getLogger(BeforeAdviceTest.class);
log.debug("addddddddddddddddddddddddddddd我是一只小毛驴");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void init() throws ServletException {
// Put your code here
ServletContext sc = getServletContext();
String path =sc.getRealPath("");
System.out.println("\naaaaaaaaaaaaaa"+path);
System.setProperty("webapp.path",path.replace('\\', '/'));
System.out.println("wowowowowow"+System.getProperty("webapp.path"));
}
}

2)log4j的配置文件log4j.properties

log4j.rootLogger=debug,appender1,appender2
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout
log4j.appender.appender2=org.apache.log4j.FileAppender
log4j.appender.appender2.File=${webapp.path}/WEB-INF/logs/log.log
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=[%d{yy-MM-dd HH\:mm\:ss\:SSS}] %m%n


3)但是这种方法在本地的java类中的main方法中调用是不会产生file日志的。Servlet中产生的日志可以写入日志文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值