Log4j简单封装及配置

大家在项目中经常会用到Log4j,一般包括4个步骤:

1.编写log4j配置文件;

2.初始化log4j;

3.获取一个logger实例;

4.调用logger.debug() 等记录日志。

为了能详细控制每个包和类的日志输出,一般在每个类中都需要定一个logger实例,类似下面这样:

public class ContextFactory {
    private static final Logger      s_logger = Logger.getLogger(ContextFactory.class);

    public void test() {
        s_logger.debug("this is debug.");
    }
}

无形中给使用带来了不便。

为了解决这个问题,本人对Log4j进行了一个简单的封装LogHelper.java:

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

public class LogHelper {

    static {
        DOMConfigurator.configure("./config/log4j.xml");
    }

    public static void info(Object msg) {
        StackTraceElement stack[] = (new Throwable()).getStackTrace();

        Logger logger = Logger.getLogger(stack[1].getClassName());
        logger.log(LogHelper.class.getName(), Level.INFO, msg, null);
    }

    public static void error(Object msg) {
        StackTraceElement stack[] = (new Throwable()).getStackTrace();

        Logger logger = Logger.getLogger(stack[1].getClassName());
        logger.log(LogHelper.class.getName(), Level.ERROR, msg, null);
    }

    public static void debug(Object msg) {
        StackTraceElement stack[] = (new Throwable()).getStackTrace();

        Logger logger = Logger.getLogger(stack[1].getClassName());
        logger.log(LogHelper.class.getName(), Level.DEBUG, msg, null);
    }

    public static void warn(Object msg) {
        StackTraceElement stack[] = (new Throwable()).getStackTrace();

        Logger logger = Logger.getLogger(stack[1].getClassName());
        logger.log(LogHelper.class.getName(), Level.WARN, msg, null);
    }

    public static void exception(Exception e) {
        StackTraceElement stack[] = (new Throwable()).getStackTrace();

        Logger logger = Logger.getLogger(stack[1].getClassName());
        logger.log(LogHelper.class.getName(), Level.ERROR, ExceptionUtil.toString(e), null);
    }

}

使用时,不需要在每个类中定义logger,而是直接调用LogHelper.debug(msg)就可以了。方便了大家的使用。

而在LogHelper.debug()中封装了获取logger对象及获取调用者位置等步骤。

最后附上一个log4j.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Threshold" value="debug" />
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%d{yyy-M-dd HH:mm:ss}] %-5p: %c - %m (%F:%L)%n" />
		</layout>
	</appender>

  <!-- 服务器主日志文件 -->
  <appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="Threshold" value="debug" />
    <!-- The active file to log to -->
    <param name="file" value="logs/asynctask.log" />
    <param name="Append" value="false" /><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
    <param name="append" value="true" />
    <param name="encoding" value="UTF-8" />
    <layout class="org.apache.log4j.PatternLayout">
      <!-- The log message pattern -->
      <param name="ConversionPattern" value="[%d{yyy-M-dd HH:mm:ss}] %-5p: %c - %m (%F:%L)%n" />
    </layout>
  </appender>

	<!-- Application Loggers -->
	<span style="color:#FF0000;"><strong><logger name="com.lenovo">
		<level value="debug" />
	</logger></strong></span>

	<strong><span style="color:#FF0000;"><logger name="org.apache">
		<level value="warn" />
	</logger></span></strong>

	<!-- Root Logger -->
	<span style="color:#FF0000;"><strong><root>
		<priority value="debug" />
		<appender-ref ref="console" />
		<appender-ref ref="file" />
	</root></strong></span>

</log4j:configuration>

解释:

1. com.lenovo下的log 显示debug信息。当然也可控制到具体的类。

2. org.apache下的log显示warn信息。

3. root显示debug信息,记录到控制台和文件。

4.配置是有顺序的,虽然root是debug级别,但在他之前定义了org.apache是warn级别,所以org.apache只会输出warn级别的log。

时间: 2024-08-10 02:15:37

Log4j简单封装及配置的相关文章

【转-整理】log4j 简单解释,配置

log4j主要由三大组件组成:loggers,appenders和layouts. 1.      定义日志组件logger 每个logger都可以拥有一个或者多个appender,每个appender表示一个日志的输出目的地,比如console或者某个文件. 配置root Logger的语法为: log4j.rootLogger=[priority],appenderName,appenderName,...- 配置自定义Logger组件的语法为: log4j.logger.loggerNam

.netcore 的一些简单封装配置文件配置动态注入到ioc

场景一些配置需要经常用到可以尝试把配置配置到配置类中需要使用时只需要通过构造函数注入配置类即可. json文件结构示例 "SmsSetting": { //253 "Host": "123", "Account": "123", "Password": "123", "Sign": "123",//标签 //梦网 "M

log4j.properties文件的配置

Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置. 1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用

Android ToolBar 的简单封装

使用过 ToolBar 的朋友肯定对其使用方法不陌生,因为其用法很简单,如果对 ActionBar 使用比较熟练的人来说,ToolBar 就更容易了!不过,相信大家在使用的过程中都遇到过这样一个问题,需要在每一个我们要使用的 xml 中添加 ToolBar 这个控件,比如我需要在 MainActivity中使用 ToolBar,则他的 xml 文件需要这样写, <RelativeLayout xmlns:android="http://schemas.android.com/apk/res

Log4j简单学习笔记

log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常用级别的划分:Debug,Info,Warn,Error,Fatal这5个级别由低到高,如果配置的级别为"INFO"那么"Debug"级别的信息则不会显示"依次类推. 示例代码: @Test public void testLevel() { log.debu

循序渐进看Java web日志跟踪(3)-Log4J的使用和配置

之前说过关于java日志跟踪的几大主要用的框架,也说到了,其实在其中,Log4J充当着一个相当重要的角色.目前,大部分框架也都是采用的是Log4J,虽然说它已经停止了更新,作者也重新起了LogBack的项目,但是,LogBack目前在国内的使用还是相当的少.目前大部分项目还是使用的是Log4J,所以记录一下Log4J的一些常见的使用方法和配置. 1.简单的Log4J使用实例 Log4J作为一个较好的框架,它有着功能强大操作简单的特点,在日常开发过程中,其实需要开发人员做的,大部分是其配置文件的编

java日志框架slf4j与log4j的使用与配置

日志记录自然是非常重要的,但恐怕能记住slf4j与log4j等日志框架配置的人就很少了,这个东西不难,只是配置好后很少会去动它,开发新项目一般也是从其他项目拷贝,或者参照文档 废话不多说,先说log4j,使用log4j只要简单的几步 首先,弄到log4j的jar包,maven工程配置以下依赖就行,或者,从阿里的maven仓库下载jar包,添加到工程的"build path" <dependency> <groupId>log4j</groupId>

软件开发工程师(JAVA)中级考试大纲-----四(四)Log4J的原理及配置;Log4J常用的API;在项目中应用日志框架Log4J关键类和接口介绍;Java properties配置文件log

log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 1定义 log4j--log for java(java的日志) 在强调可重用组件开发的今天,除了

nodeweibo对新浪微博接口的简单封装

一.前言 就在去年12月份,有个想法是使用node爬取微博的数据,于是简单的封装了一个nodeweibo这个库.时隔一年,没有怎么维护,中途也就将函数形式改成了配置文件.以前做的一些其他的项目也下线了,为了是更加专注前端 & node.js.偶尔看到下载量一天超过60多,持续不断的有人在用这个库,但是看下载量很少也就没有更新.但是昨天,有人pull request这个分支了,提出一些中肯的建议和有用的代码.于是就认真回顾了下nodeweibo,发布了v2.0.3这个版本. 二.什么是nodewe