log4j介绍、配置与使用

本文详细介绍Log4j的配置方法,包括配置文件的格式、主要组件及其使用方式,并提供了.properties和.xml配置文件的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[quote][size=x-small] 在做java开发中,难免要用到日志,在java的api中也有日志系统,但是功能不是很强大,所以我们常用的还是apache的log4j。它的使用通常分两部分,一个程序代码中编写;一个是配置文件(可以使用properties文件和特定的xml文件)。有的时候,配置部分也可以写到代码中,不需要配置文件,这种方法使用相对较少,因为不够灵活。使用之前,先学学log4j的配置的相关知识;然后是我的工程中使用的例子。log4j的jar包在附件中,使用邮件发送log,需要javamail.jar包,也在附件中。[/size][/quote]
[quote][size=x-small]一、主要组件

1、根类别(在类别层次结构的顶部,即全局性的日志级别) 配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, ...

level 是日志记录的类别
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
类别level 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、LOG、ALL或自定义的优先级。

log4j常用的优先级FATAL>ERROR>WARN>INFO>DEBUG
如果为log4j.rootLogger=WARN,则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO将被屏蔽掉。
举例:log4j.rootCategory=INFO,stdout,Runlog,Errorlog
根日志类别为INFO,DEBUG将被屏蔽,其他的将被输出。 stdout,Runlog,Errorlog分别为3个输出目的地。

2、常用输出格式
-X号:X信息输出时左对齐;
%p:日志信息级别
%d{}:日志信息产生时间
%c:日志信息所在地(类名)
%m:产生的日志具体信息
%n:输出日志信息换行

举例:
Java代码
查看源代码打印

log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n


3、布局
使用的输出布局,其中log4j提供4种布局:
Java代码
查看源代码打印
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)


举例:
输出格式为HTML表格
log4j.appender.stdout.layout=org.apache.log4j.HTMLLayout
输出格式为可以灵活地指定布局模式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
输出格式为包含日志信息的级别和信息字符串
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
输出格式为包含日志产生的时间、线程、类别等等信息
log4j.appender.stdout.layout=org.apache.log4j.TTCCLayout

4、目的地

配置日志信息输出目的地Appender,其语法为
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
log4j支持的输出目的地:
Java代码
查看源代码打印
org.apache.log4j.ConsoleAppender 控制台
org.apache.log4j.FileAppender 文件
org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
org.apache.log4j.net.SMTPAppender 邮件
org.apache.log4j.jdbc.JDBCAppender 数据库

其他如:GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等
举例:
Java代码
查看源代码打印
输出到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender(指定输出到控制台)
log4j.appender.Threshold=DEBUG(指定输出类别)
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout(指定输出布局)
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定输出格式)

输出到文件
log4j.appender.FILE=org.apache.log4j.FileAppender(指定输出到文件)
log4j.appender.FILE.File=file.log(指定输出的路径及文件名)
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout(指定输出的布局)
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定输出的格式)
输出到文件(轮换"日志文件",当日志文件达到指定大小时,该文件就被关闭并备份,然后创建一个新的日志文件)
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender(指定输出到文件)
log4j.appender.ROLLING_FILE.Threshold=ERROR(指定输出类别)
log4j.appender.ROLLING_FILE.File=rolling.log(指定输出的路径及文件名)
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB(指定输出到文件的大小)
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout(指定采用输出布局)
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(指定采用输出格式)
输出到Socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender(指定输出到Socket)
log4j.appender.SOCKET.RemoteHost=localhost(远程主机)
log4j.appender.SOCKET.Port=5001(远程主机端口)
log4j.appender.SOCKET.LocationInfo=true
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout(布局)
log4j.appender.SOCET.layout.ConversionPattern =[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY] %n %m[MESSAGE]%n%n(输出格式)
输出到邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender(指定输出到邮件)
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@hollycrm.com(发件人)
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com(SMTP服务器)
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@hollycrm.com(收件人)
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout(布局)
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(格式)
输出到数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender(指定输出到数据库)
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test(指定数据库URL)
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver(指定数据库driver)
log4j.appender.DATABASE.user=root(指定数据库用户)
log4j.appender.DATABASE.password=root(指定数据库用户密码)
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')(组织SQL语句)
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout(布局)
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n(格式)

5、日志类别补充
有时我们需要对某个特定的部分指定有别于根类别的日志类别,可以指定某个包的优先级如:
log4j.category.com.neusoft.mbip.dm.util=ERROR ,其中com.neusoft.mbip.dm.util为我们需要特别指定日志类别的部分。
或者可以指定输出文件的优先级
log4j.appender.Errorlog.Threshold=ERROR

二、 常用log4j配置

常用log4j配置,一般可以采用两种方式,.properties和.xml,下面举两个简单的例子:
1、log4j.properties
Java代码
查看源代码打印
### 设置org.zblog域对应的级别INFO,DEBUG,WARN,ERROR和输出地A1,A2 ##
log4j.category.org.zblog=ERROR,A1
log4j.category.org.zblog=INFO,A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
### 设置输出地A1,为ConsoleAppender(控制台) ##
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
### 设置A1的输出布局格式PatterLayout,(可以灵活地指定布局模式)##
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
### 配置日志输出的格式##
log4j.appender.A2=org.apache.log4j.RollingFileAppender
### 设置输出地A2到文件(文件大小到达指定尺寸的时候产生一个新的文件)##
log4j.appender.A2.File=E:/study/log4j/zhuwei.html
### 文件位置##
log4j.appender.A2.MaxFileSize=500KB
### 文件大小##
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
##指定采用html方式输出


2、log4j.xml:

Java代码
查看源代码打印
<LOG4J:CONFIGURATION xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 设置通道ID:org.zblog.all和输出方式:org.apache.log4j.RollingFileAppender -->
<APPENDER class=org.apache.log4j.RollingFileAppender name="org.zblog.all">

<!-- 设置File参数:日志输出文件名 -->
<PARAM name="File" value="E:/study/log4j/all.output.log" />
<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<PARAM name="Append" value="false" />

<LAYOUT class=org.apache.log4j.PatternLayout>
<!-- 设置输出文件项目和格式 -->
<PARAM name="ConversionPattern" value="%p (%c:%L)- %m%n" />
</LAYOUT>
</APPENDER>
<APPENDER class=org.apache.log4j.RollingFileAppender name="org.zblog.zcw">
<PARAM name="File" value="E:/study/log4j/zhuwei.output.log" />
<PARAM name="Append" value="true" />
<!-- 设置文件大小 -->
<PARAM name="MaxFileSize" value="10240" />
<LAYOUT class=org.apache.log4j.PatternLayout>
<PARAM name="ConversionPattern" value="%p (%c:%L)- %m%n" />
</LAYOUT>
</APPENDER>
<!-- 设置域名限制,即zcw.log域及以下的日志均输出到下面对应的通道中 -->
<LOGGER name="zcw.log">
<!-- 设置级别 -->
<LEVEL value="debug">
<!-- 与前面的通道id相对应 -->
<APPENDER-REF ref="org.zblog.zcw">
<!-- 设置接收所有输出的通道 -->
</APPENDER-REF> <ROOT>
<!-- 与前面的通道id相对应 -->
<APPENDER-REF ref="org.zblog.all">
</APPENDER-REF>
</ROOT>
</LEVEL>
</LOGGER>
</LOG4J:CONFIGURATION>


3、配置文件加载方法:

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
public class Log4jApp {

public static void main(String[] args) {

DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加载.xml文件

//PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加载.properties文件

Logger log=Logger.getLogger("org.zblog.test");

log.info("测试");
}
}

[/size][/quote]



import java.io.FileInputStream;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
* 使用LOG4J输出日志。
*
* @作者 华龙
*
* @日期 2008-11-15
*
*/
public class SlcxLogger {
//是否采集日志配置
private static boolean isLoad=false;


/**
* 使用默认的日志配置文件获得一个指定对象的日志对象。
*
* @param object 需要输出日志的对象。
*
* @return 指定对象的日志对象
*/
public static Logger getLogger(Object object) {
//加载默认的配置
return getLogger(object,null);
//加载自定义的配置
// return getLogger(object,"./config/slcxlog.properties");
}

/**
* 获得一个Logger对象,使用指定的日志配置文件。
*
* @param object 需要输出日志的对象。
* @return 指定对象的日志对象。
*/
public static Logger getLogger(Object object, String properties) {
if(!isLoad){
load(properties);
}

return Logger.getLogger(object.getClass());
}

/**
* 加载日志配置文件。
*
* @param properties 日志配置文件。
*/
private static void load(String properties){
if(isLoad==true){
return ;
}
try {
Properties props = new Properties();

if(properties!=null){
//加载配置
props.load(new FileInputStream(properties));
}
else{
//加载默认的配置
props.load(SlcxLogger.class.getResourceAsStream("slcxlogger.properties"));
}

//配置日志配置文件
PropertyConfigurator.configure(props);

//设置初始化成功
isLoad=true;

}catch (Exception e){
//设置初始化失败
isLoad=false;
e.printStackTrace();
}
}


public static void test() {
Logger log = SlcxLogger.getLogger(SlcxLogger.class);
log.fatal("这是 fatal");
log.error("这是 error");
log.warn("这是 warn");
log.info("这是 info");
log.debug("这是 debug");
}

public static void main(String[] args) {
test();
}
}


//以下类是为了用log4j发中文邮件使用的,为了防止中文乱码

import org.apache.log4j.HTMLLayout;

/**
* 用log4j来发送邮件时,防止中文内容乱码。
*
* @作者 华龙
*
* @日期 2010-02-08
*
*/
public class MailLogLayOut extends HTMLLayout {

public String getContentType() {
//修改编码方式,使之支持中文
return "text/html;charset=GBK";
}
}


///////////////////////////////////////////////////

//配置文件名“slcxlogger.properties”,具体内容如下:

# A1 is file; A2 is console.;A3 is email
log4j.rootLogger=INFO,A2

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=./logs/slcxlogger.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss}][%t][%C.%M]%n[LINE\:%L][%p]\:%m%n


log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.Threshold=INFO
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss}][%t][%C.%M]%n[LINE\:%L][%p]\:%m%n


log4j.appender.A3=org.apache.log4j.net.SMTPAppender
# 日志的错误级别
log4j.appender.A3.Threshold=error
# 缓存文件大小,日志达到1K时发送Email 可以自定义缓存文件的大小
log4j.appender.A3.BufferSize=10

# 发送邮件的服务器名称或IP地址
log4j.appender.A3.SMTPHost=smtpcom.263xmail.com

#SMTP服务器认证帐号,跟邮箱地址相同
log4j.appender.A3.SMTPUsername=hual@solardata.com.cn
#SMTP服务器认证密码,跟邮箱密码相同
log4j.appender.A3.SMTPPassword=hl123456

#是否打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息
log4j.appender.A3.SMTPDebug=false

#邮件标题:沪深ETF采集报错。使用native2ascii把本地编码转换成UNICODE编码,防止邮件标题乱码。
log4j.appender.A3.Subject=\u6CAA\u6DF1ETF\u91C7\u96C6\u9519\u8BEF
# 发件人邮箱地址
log4j.appender.A3.From=hual@solardata.com.cn
# 日志邮件的接收者
log4j.appender.A3.To=lik@solardata.com.cn

# 日志布局DefineLayOut,扩展了HTMLLayout。防止邮件内容乱码
log4j.appender.A3.layout=slcx.com.log.MailLogLayOut

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值