Log4j的使用

在程序开发过程中,调试程序和生产环境中日志的记录是必不可少的。
Log4j可以控制日志的级别(info/debug/error)和输出的方式(控制台输出/文件/数据库记录)。
(1) 下载Log4j的jar文件,并放置到WEB-INF的lib目录中;
(2) 定义Log4j的配置文件,properties

### 设置###
log4j.rootLogger = debug,stdout,D,F

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/logs/at_log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.F = org.apache.log4j.DailyRollingFileAppender
log4j.appender.F.File =D:/logs/at_error.log 
log4j.appender.F.Append = true
log4j.appender.F.Threshold = ERROR 
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

(3) 在项目中,可以指定多了Source Folder,但是Source Folder一般都是被编译到classes目录下,而且源文件不一定是.java文件,其他的配置文件我们也认为是源文件,比如.properties .json .xml都属于源文件。
为了区别.java文件,在Eclipse中创建conf的Source Folder,将log4j.properties文件放在其根目录中。
(4) 定义Log4JinitServlet
a) 在web.xml配置如下:

<!--用来启动 log4jConfigLocation的servlet -->
<servlet>
    <servlet-name>Log4JInitServlet</servlet-name>
    <servlet-class>com.ntqingniao.as.servlet.Log4JInitServlet</servlet-class>
    <init-param>
        <param-name>log4j-properties-location</param-name>
        <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

b) 定义Servlet类

@WebServlet("/Log4JInitServlet")
public class Log4JInitServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Log4JInitServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        System.out.println("Log4JInitServlet 正在初始化 log4j日志设置信息");
        String log4jLocation = config.getInitParameter("log4j-properties-location");

        ServletContext sc = config.getServletContext();

        if (log4jLocation == null) {
            System.err.println("*** 没有 log4j-properties-location 初始化的文件, 所以使用 BasicConfigurator初始化");
            BasicConfigurator.configure();
        } else {
            String webAppPath = sc.getRealPath("/");
            String log4jProp = webAppPath + log4jLocation;
            File yoMamaYesThisSaysYoMama = new File(log4jProp);
            if (yoMamaYesThisSaysYoMama.exists()) {
                System.out.println("使用: " + log4jProp + "初始化日志设置信息");
                PropertyConfigurator.configure(log4jProp);
            } else {
                System.err.println("*** " + log4jProp + " 文件没有找到, 所以使用 BasicConfigurator初始化");
                BasicConfigurator.configure();
            }
        }
        super.init(config);
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

(5)在实例中使用log4j
a) 在相关要使用log4j的类中定义

private static Logger logger = Logger.getLogger(LoginAction.class);

b) logger.debug:在程序开发过程中,我们一般用debug进行程序的调试
c) logger.info:输出一些关键的信息
d) logger.error:输出错误的信息
e) info级别的输出做多,其次debug,然后是error。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值