`

log4j入门与提高-实例讲解

    博客分类:
  • JAVA
阅读更多

官方网站:http://logging.apache.org/log4j/index.html:

 

废话不多说,切入主题,下面都是基础的应用。后面我会写有关扩展的应用,使它更听话。

 

读取配置文件

package org.cjj.log4j.config.xml;

import java.net.URL;

import org.apache.log4j.xml.DOMConfigurator;

/**
 * 单实例 读取log4j配置文件,初始化log4j
 * 
 * @author cjj
 * 
 */
public class Log4jXMLConfig
{
    private static Log4jXMLConfig instance;

    public static synchronized Log4jXMLConfig initia()
    {
        if (instance == null)
        {
            return new Log4jXMLConfig();
        }
        return instance;
    }

    private Log4jXMLConfig()
    {
        final URL url = Log4jXMLConfig.class.getResource("log4j.xml");
        DOMConfigurator.configure(url);
    }
}

 

配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- ========================== 自定义输出格式说明================================ -->
	<!-- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL -->
	<!-- #%r 输出自应用启动到输出该log信息耗费的毫秒数  -->
	<!-- #%c 输出所属的类目,通常就是所在类的全名 -->
	<!-- #%t 输出产生该日志事件的线程名 -->
	<!-- #%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” -->
	<!-- #%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921  -->
	<!-- #%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)  -->
	<!-- ========================================================================== -->
	
	<!-- ========================== 输出方式说明================================ -->
	<!--	Log4j提供的appender有以下几种:  -->
	<!-- org.apache.log4j.ConsoleAppender(控制台),  -->
	<!-- org.apache.log4j.FileAppender(文件),  -->
	<!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->
	<!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  -->
	<!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)   -->
<!-- ========================================================================== -->
<!-- 输出到日志文件  -->
	<appender name="filelog_appender"
		class="org.apache.log4j.RollingFileAppender">
		<!-- 设置File参数:日志输出文件名 -->
		<param name="File" value="log/testlog4jxml_all.log" />
		<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
		<param name="Append" value="true" />
		<!-- 设置文件大小 -->
		<param name="MaxFileSize" value="1MB" />
		<!-- 设置文件备份 -->
		<param name="MaxBackupIndex" value="10000" />
		<!-- 设置输出文件项目和格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p (%c:%L)- %m%n" />
		</layout>
	</appender>

<!-- 输出到日志文件 每天一个日志  -->
	<appender name="filelog_daily" class="org.apache.log4j.DailyRollingFileAppender">   
	    <param name="File" value="log/daily.log" />   
        <param name="DatePattern" value="'daily.'yyyy-MM-dd'.log'" />   
        <layout class="org.apache.log4j.PatternLayout">   
        	<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] (%c:%L) - %m%n" />   
        </layout>   
  	</appender> 

<!-- 输出到控制台中 -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{yyyy-MM-dd HH:mm:ss} %-5p: %m%n" />
			<!-- "%-5p: [%t] [%c{3}.%M(%L)] | %m%n" -->
		</layout>
	</appender>

<appender name="EMAIL_QQ" class="org.apache.log4j.net.SMTPAppender">
		<param name="Threshold" value="INFO"/>
		<param name="BufferSize" value="128" />
		<param name="SMTPHost" value="smtp.qq.com" />
		<param name="SMTPUsername" value="cjjvictory" />
		<param name="SMTPPassword" value="***" />
		<param name="From" value="cjjvictory@qq.com" />
		<param name="To" value="cjjvictory@gmail.com" />
		<param name="Subject" value="测试邮件发送" />
		<param name="LocationInfo" value="true" />
		<param name="SMTPDebug" value="true" />
		<layout class="org.cjj.log4j.extend.PatternLayout_zh">
			<param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m%n"/>
		</layout>
	</appender>

<!--- 异步测试,当日志达到缓存区大小时候执行所包的appender -->
	<appender name="ASYNC_test" class="org.apache.log4j.AsyncAppender">   
     <param name="BufferSize" value="10"/>   
     <appender-ref ref="EMAIL_QQ"/>
   </appender>

 <!-- 设置包限制输出的通道 -->
	<category name="org.cjj" additivity="false">
               <!-- 日志输出级别,起码可以有5个级别,可以扩展自己的级别,邮件发送必须是ERROR级别不好用,所以最后自己扩展一个邮件发送级别 -->
		<level value="ERROR" />
		<appender-ref ref="filelog_daily" />
		<appender-ref ref="daily_appender" />
		<appender-ref ref="console" />
		<appender-ref ref="ASYNC_test" />
 </category>

</log4j:configuration>

 

邮件乱码问题:

 

邮件发送的布局采用了org.cjj.log4j.extend.PatternLayout_zh,因为原来的org.apache.log4j.PatternLayout会有乱码,所以重写一个方法既可。可能方法有点野蛮,所以那位有好的方法还请指教。

 

package org.cjj.log4j.extend;

import org.apache.log4j.PatternLayout;

public class PatternLayout_zh extends PatternLayout
{
	@Override
	public String getContentType()
	{
		return "text/html;charset=GBK";
	}
}
 

 

17
6
分享到:
评论
5 楼 lingpeng2009 2009-08-09  
学习啦!!谢谢LZ 
4 楼 so_fast 2009-08-05  
总结的很好呀.让人很容易理解,
支持楼主.....
3 楼 lkjust08 2009-08-05  
不错,比我写的那个log4j使用总结要好,如果能把输入到 数据库的部分加上就好了,这样就全了,lz可以补上去,期待。
2 楼 elf8848 2009-08-05  
    老朋友过来看看
1 楼 fishice 2009-08-04  

相关推荐

    java学习log4j详细文档和入门工程

    Log4j还可以与其他组件结合,如SLF4J(Simple Logging Facade for Java),提供更灵活的日志抽象层,或者通过Logback作为后端实现,提高日志处理性能。 总之,Log4j是Java开发者必备的工具之一,通过深入学习和实践...

    log4j从入门到详解

    最后,教程可能还会讨论log4j与其他日志框架(如logback、slf4j)的对比,以及如何在实际项目中选择合适的日志解决方案。在实际开发中,了解这些框架的优缺点和兼容性,可以帮助我们做出更明智的决策。 通过《log4j...

    Log4j的HelloWorld 在javaSE中入门使用一

    本篇文章将深入讲解如何在Java SE环境中使用Log4j进行“Hello, World!”的入门实践。 首先,我们需要理解Log4j的基本概念。Log4j由三个主要组件构成:Logger(日志器)、Appender(输出端)和Layout(布局)。...

    Log4j相关资料

    “log4j详解与实践”可能深入讲解了如何在实际项目中应用Log4j;“log4j学习笔记”可能是个人学习过程中的总结,包含了作者的一些理解和技巧;“使用Log4j进行日志操作”可能专门针对Log4j的使用方法进行了详细讲解...

    C++log4cxx新手入门

    本文将详细讲解如何对C++新手入门Log4cxx,帮助初学者快速掌握这一工具。 首先,我们需要了解Log4cxx的基本架构。Log4cxx的核心概念包括Logger(日志器)、Appender(输出端)、Layout(布局)和Filter(过滤器)。...

    JAVA简单入门实例

    10. **异常处理和日志记录**: 学习如何使用日志框架(如Log4j)记录程序运行信息,以及如何正确处理程序中的异常,提高程序的可维护性。 通过这些实例,初学者不仅可以了解Java语法,还能深入理解编程思维和解决...

    Spring AOP入门及其实例讲解、下载

    **Spring AOP 入门及其实例讲解** 在软件开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,它旨在提高代码的可重用性,减少冗余,并将关注点分离。Spring框架是Java开发中的一个流行...

    matlab入门经典教程--百看不厌

    本教程将详细讲解这些知识点,并通过丰富的示例和练习,帮助你逐步熟练运用MATLAB,无论是简单的计算任务还是复杂的工程项目,都能得心应手。无论你是学生还是工程师,都可以通过这个“百看不厌”的MATLAB入门教程,...

    JavaScript入门教程--书籍(pdf)

    这个“JavaScript入门教程”将深入讲解这些概念,并通过实例帮助你巩固理解。无论你是完全的新手还是希望温故知新的开发者,都能从中受益。超清晰的PDF格式确保你能清晰地阅读每一个细节,愉快地学习JavaScript之旅...

    vue入门之--路由.docx

    下面将详细讲解Vue Router的基本使用步骤和动态路由的配置。 1. **安装Vue Router** 首先,你需要通过 npm (Node Package Manager) 来安装Vue Router。在命令行中输入以下命令: ``` npm install vue-router --...

    struts2 hibernate spring整合入门(附实例源码及jarbao--用户名字段的操作)

    log4j-1.2.15.jar是日志记录工具;commons-dbcp.jar和commons-pool.jar提供了数据库连接池服务,优化数据库资源的使用;slf4j-api-1.5.8.jar是简单日志门面,可以适配多种日志实现;struts2-spring-plugin-2.0.14....

    Express进阶之log4js实用入门指南

    本文从入门实例开始,讲解log4js的使用,以及如何跟Express进行整合。 入门例子 输出日志如下,包括日志打印时间、日志级别、日志分类、日志内容。 // started.js var log4js = require('log4js'); var logger = ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不...

    ajax简单入门讲解

    **Ajax(Asynchronous JavaScript and XML)简单入门讲解** Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术的出现极大地提升了用户体验,因为它允许页面在后台与服务器进行通信,而...

    ibatis 开发指南,开发手册 txt 版

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%c{1}-%m%n log4j.logger.com.ibatis=DEBUG ``` ### iBatis核心概念 - **SqlMapClient**: 是...

    算法-数列分块入门 2(LibreOj-6278).rar

    数列分块是一种在处理大规模数据时常用的优化技巧,尤其在算法竞赛和程序设计中...这个“算法-数列分块入门 2(LibreOj-6278).pdf”文件应会详细阐述这一方法,并结合实例进行讲解,帮助读者掌握这一实用的算法技巧。

    Nodejs进阶:核心模块net入门学习与实例讲解

    console.log('客户端:已经与服务端建立连接'); }); client.on('data', function(data) { console.log('客户端:收到服务端数据,内容为:' + data); }); client.on('close', function() { console.log('客户端:...

    ORACLE 数据库入门.ppt

    本资料《ORACLE数据库入门》主要介绍了Oracle数据库的基本架构、内存结构、实例、会话、事务以及SQL语句的执行过程,并简要讲解了数据库的启动与关闭。 1. **Oracle体系结构** - 物理结构:Oracle数据库的核心物理...

Global site tag (gtag.js) - Google Analytics