java编写日志

最近做j2ee的时候:运行tomcat后总是出现:

log4j:WARN No appenders could be found for logger (samp.Test1).
log4j:WARN Please initialize the log4j system properly.

 

查阅资料:搞清问题还是出在日志配置文件的初始化的时候,也就是该应用程序找不到log4j.properties.那么我们针对这个症结来解决!

查了很多资料,解决方案一大堆,不过真要解决实际问题,那还得以实而论,我这个程序就只是为了解决这个警告,最简单的就是将debug信息输出到控制台,那就可以这样写:

 

下面这个是先初始化log

import com.foo.Bar;

// Import log4j classes.
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;


public class MyApp {

   // Define a static logger variable so that it references the
   // Logger instance named "MyApp".
   static Logger logger = Logger.getLogger(MyApp.class);

   public static void main(String[] args) {

     // Set up a simple configuration that logs on the console.
     BasicConfigurator.configure();

     logger.info("Entering application.");
     Bar bar = new Bar();
     bar.doIt();
     logger.info("Exiting application.");
   }
}
接着我们就可以直接用了:

 package com.foo;
import org.apache.log4j.Logger;

public class Bar {
   static Logger logger = Logger.getLogger(Bar.class);

   public void doIt() {
     logger.debug("Did it again!");
   }
}

 

 

说到底最关键的还是BasicConfigurator.configure();

在我们的web合适的地方加上这句,就可以在控制台看到我们的调试信息了!

另外一种我们要写入到我们的调试文件:就这样写了.

我们写个这样的初始化properties的类:

package com.foo;

import org.apache.log4j.PropertyConfigurator;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.IOException;

public class Log4jInit extends HttpServlet {

  public
  void init() {
    String prefix =  getServletContext().getRealPath("/");
    String file = getInitParameter("log4j-init-file");
    // if the log4j-init-file is not set, then no point in trying
    if(file != null) {
      PropertyConfigurator.configure(prefix+file);
    }
  }

  public
  void doGet(HttpServletRequest req, HttpServletResponse res) {
  }
}

在配置文件中这样写:

<servlet>
    <servlet-name>log4j-init</servlet-name>
    <servlet-class>com.foo.Log4jInit</servlet-class>

    <init-param>
      <param-name>log4j-init-file</param-name>
      <param-value>WEB-INF/classes/log4j.lcf</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
  </servlet>

 

这样警告就离我远去了!
上面这两个例子只是针对Hibernate中加的log,当然可能因为所用的eclipse版本不一样会有些差别.

比如在用spring的时候也会有这个问题,那么我们解决的时候,就可以按照大虾们介绍的:

 

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

······

<!-- 定义LOG4J监听器 -->
<listener>
   <listener-class>
org.springframework.web.util.Log4jConfigListener
   </listener-class>
</listener>


当然还有的说在ContextLoaderListener改为SpringContextServle等等,这些问题还是哪句话,事实而论!

 

更多介绍参见:

http://logging.apache.org/log4j/1.2/manual.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值