log4g
org.apache.log4j.Logger 详解
1. 概述
1.1. 背景
在应用程序中添加日志记录总的来说基于三个目的
:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类
来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。
http://logging.apache.org/log4j/
官网地址
1.2. Log4j
简介
在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,
Apache
为我们提供了一个强有力的日志操作包
-Log4j
。
Log4j
是
Apache
的一个开放源代码项目,通过使用
Log4j
,我们可以控制日志信息输送的目的地是控制台、文件、
GUI
组件、甚至是套接口服
务器、
NT
的事件记录器、
UNIX Syslog
守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就
是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
此外,通过
Log4j
其他语言接口,您可以在
C
、
C+
+
、
.Net
、
PL/SQL
程序中使用
Log4j
,其语法和用法与在
Java
程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通
过使用各种第三方扩展,您可以很方便地将
Log4j
集成到
J2EE
、
JINI
甚至是
SNMP
应用中。
2.
一个简单的实例
项目结构:
Java
代码:
- package com.coderdream.log4j;
- import org.apache.log4j.Logger;
- public class HelloLog4j {
-
private static Logger logger = Logger.getLogger(HelloLog4j.class);
- public static void main(String[] args) {
- //
记录
debug
级别的信息 - logger.debug("This is debug message.");
- //
记录
info
级别的信息 - logger.info("This is info message.");
- //
记录
error
级别的信息 - logger.error("This is error message.");
- }
- }
配置文件
log4j.properties:
Properties
代码
#
可以设置级别:
debug>info>error
#debug
:显示
debug
、
info
、
error
#info
:显示
info
、
error
#error
:只
error
#
也就是说只显示比大于等于当前级别的信息
log4j.rootLogger=debug,appender1
#log4j.rootLogger=info,appender1
#log4j.rootLogger=error,appender1
#
输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#
样式为
TTCCLayout
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
输出结果:
Console
代码
[main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.
[main] INFO com.coderdream.log4j.HelloLog4j - This is info message.
[main] ERROR com.coderdream.log4j.HelloLog4j - This is error message.
通过配置文件可知,我们需要配置
3
个方面的内容:
1
、根目录(级别和目的地);
2
、目的地(控制台、文件等等);
3
、输出样式。
下面我们来看看Log4J
的类图:
Logger
-
日志写出器
,供程序员输出日志信息
Appender -
日志目的地
,把格式化好的日志信息输出到指定的地方去
Layout -
日志格式化器
,用来把程序员的
logging request
格式化成字符串
2 .
Log4j
基本使用方法
Log4j
由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式
。日志信息的优先级从高到低有
ERROR
、
WARN
、
INFO
、
DEBUG
,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
1
、定义配置文件
其实您也可以完全不使用配置文件,而是在代码中配置
Log4j
环境。但是,使用配置文件将使您的应用程序更加灵活。
Log4j
支持两种配置文件格式,一种是
XML
格式的文件,一种是
Java
特性文件(键
=
值
properties
文件)。下面我们介绍使用
Java
特性文件做为配置文件的方法:
1
)
.
配置根
Logger
,其语法为:
log4j.rootLogger = [ level ] , appenderName,
appenderName, …
其中,
level
是日志记录的优先级,分为
OFF
、
FATAL
、
ERROR
、
WARN
、
INFO
、
DEBUG
、
ALL
或者您定义的级别。
Log4j
建议只使用四个级别
,优先级从高到低分别是
ERROR
、
WARN
、
INFO
、
DEBUG
。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定
义了
INFO
级别,则应用程序中所有
DEBUG
级别的日志信息将不被打印出来
。
appenderName
就是指
B
日志信息输出到哪个地方。您可以同时指定多个输出目的地。
2
)配置日志信息输出目的地
Appender
,其语法为:
log4j.appender.appenderName =
fully.qualified.name.of.appender.class.
其中,
Log4j
提供的
appender
有以下几种:
1.org.apache.log4j.ConsoleAppender
(控制台),
2.org.apache.log4j.FileAppender
(文件),
3.org.apache.log4j.DailyRollingFileAppender
(每天产生一个日志文件),
4.org.apache.log4j.RollingFileAppender
(文件大小到达指定尺寸的时候产生一个
新的文件)
5.org.apache.log4j.WriterAppender
(将日志信息以流格式发送到任意指定的地方)
3) .
配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout
= fully.qualified.name.of.layout.class
其中,
Log4j
提供的
layout
有以
e
几种:
1.org.apache.log4j.HTMLLayout
(以
HTML
表格形式布局),
2.org.apache.log4j.PatternLayout
(可以灵活地指定布局模式),
3.org.apache.log4j.SimpleLayout
(包含日志信息的级别和信息字符串),
4.org.apache.log4j.TTCCLayout
(包含日志产生的时间、线程、类别等等信息)
Log4J
采用类似
C
语言中的
printf
函数的打印格式格式化日志信息,打印参数如下:
%m
输出代码中指定的消息
%p
输出优先级,即
DEBUG
,
INFO
,
WARN
,
ERROR
,
FATAL
%r
输出自应用启动到输出该
log
信息耗费的毫秒数
%c
输出所属的类目,通常就是所在类的全名
%t
输出产生该日志事件的线程名
%n
输出一个回车换行符,
Windows
平台为
“rn”
,
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)
2.
在代码中使用
Log4j
1.
得到记录器
使用
Log4j
,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:
public static
Logger getLogger( String name)
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。
Name
一般取本类的名字,比如:
static Logger
logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
2.
读取配置文件
当获得了日志记录器之后,第二步将配置
Log4j
环境,其语法为:
BasicConfigurator.configure
()
:
自动快速地使用缺省
Log4j
环境。
PropertyConfigurator.configure
( String configFilename)
:读取使用
Java
的特性文件编写的配置文件。
DOMConfigurator.configure
( String filename )
:读取
XML
形式的配置文件。
3.
插入记录信息(格式化日志信息)
当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
Logger.debug ( Object message ) ;
Logger.info
( Object message ) ;
Logger.warn
( Object message ) ;
Logger.error
( Object message ) ;
3.
示例
2
~示例
8
【示例
2
】
输出为文本文件或
HTML
文件
Porperties
代码
- #
设置级别: - log4j.rootLogger=debug,appender1
- log4j.appender.appender1=org.apache.log4j.FileAppender
- #
设置文件输出路径 - log4j.appender.appender1.File=c:/Log4JDemo02.html
- #
设置文件输出样式 - log4j.appender.appender1.layout=org.apac
he.log4j.HTMLLayout
【
示例3
】
输出为文本文件或HTML
文件
Properties
代码
- #
设置级别和多个目的地
- log4j.rootLogger=debug,appender1,appender2
- #
输出到控制台 - log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
- #
输出到文件
(
这里默认为追加方式
) - log4j.appender.appender2=org.apache.log4j.FileAppender
- log4j.appender.appender2.File=c:/Log4JDemo02.html
- log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
【
示例
4
】
SimpleLayout
样式
Properties
代码
- #
设置级别和目的地 - log4j.rootLogger=debug,appender1
- #
输出到控制台 - log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- #
设置输出样式 - log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout
控制台代码
DEBUG
- This is debug message.
INFO
- This is info message.
ERROR
- This is error message.
【示例5
】 自定义样式
Java
代码
- #
设置级别和目的地 - log4j.rootLogger=debug,appender1
- #
输出到控制台 - log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- #
设置输出样式 - log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
- #
自定义样式 - log4j.appender.appender1.layout.ConversionPattern
=%r [%t] [%p] - %c -%l -%m%n
#
自定义样式
# %r
时间
0
# %t
方法名
main
# %p
优先级
DEBUG/INFO/ERROR
# %c
所属类的全名
(
包括包名
)
# %l
发生的位置,在某个类的某行
# %m
输出代码中指定的讯息,如
log(message)
中的
message
# %n
输出一个换行
log4j.appender.appender1.layout.ConversionPattern
=%r
[%t] [%p] - %c -%l -%m%n
输出结果:
控制台代码
0
[main] [DEBUG] - com.coderdream.log4j.HelloLog4j
-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:16
)
-This is debug message.
31
[main]
[INFO] - com.coderdream.log4j.HelloLog4j -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:18
) -This is info message.
31
[main] [ERROR] - com.coderdream.log4j.HelloLog4j
-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:20
)
-This is error message.
【示例6
】 多目的地、自定义样式
Properties
代码
- #
设置级别和目的地 - log4j.rootLogger=debug,appender1,appender2
- #
输出到控制台 - log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- #
设置输出样式 - log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
- log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n
- #
输出到文件
(
这里默认为追加方式
) - log4j.appender.appender2=org.apache.log4j.FileAppender
- #
设置文件输出路径 - log4j.appender.appender2.File=c:/Log4JDemo06.log
- #
设置文件输出样式 - log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
- log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
【示例
7
】
【企业应用】设置
特定包的级别和目的地
先增加一个包,新建一个类:
Java
代码
- package com.coderdream.log4jDao;
- import org.apache.log4j.Logger;
- public class HelloDao {
- private static Logger logger = Logger.getLogger(HelloDao.class);
- public static void main(String[] args) {
- //
记录
debug
级别的信息 - logger.debug("This is debug message from Dao.");
- //
记录
info
级别的信息 - logger.info("This is info message from Dao.");
- //
记录
error
级别的信息 - logger.error("This is error message from Dao.");
- }
- }
如果这个类作为基类,如
J2EE
中的
BaseDao
、
BaseAction
、
BaseService
等等,则我们可以将各层的日志信息分类输出到各个文件。
Properties
代码
- #
省略根,只设置特定包的级别和目的地
- log4j.logger.com.coderdream.log4j
=debug,appender1 - log4j.logger.com.coderdream.log4jDao
=info,appender1,appender2 - #
输出到控制台 - log4j.appender.appender1=org.apache.log4j.ConsoleAppender
- log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
- log4j.appender.appender1.layout.ConversionPattern
=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n - #
输出到文件
(
这里默认为追加方式
) - log4j.appender.appender2=org.apache.log4j.FileAppender
- log4j.appender.appender2.File=c:/Log4JDemo07_Dao.log
- log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
- log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
【示例
8
】
log4j.xml
的配置方式
Xml
代码
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
- <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
- <appender name="appender1"
- class="org.apache.log4j.RollingFileAppender">
- <param name="File" value="logfile08.html" />
- <param name="MaxFileSize" value="1MB" />
- <param name="MaxBackupIndex" value="5" />
- <layout class="org.apache.log4j.HTMLLayout">
- </layout>
- </appender>
- <root>
- <level value="debug" />
- <appender-ref ref="appender1" />
- </root>
- </log4j:configuration>
<?xml version="1.0"
encoding="UTF-8"?>
<!DOCTYPE log4j:configuration
SYSTEM "log4j.dtd">
<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender
name="appender1"
class="org.apache.log4j.RollingFileAppender">
<param
name="File" value="logfile08.html" />
<param
name="MaxFileSize" value="1MB" />
<param
name="MaxBackupIndex" value="5" />
<layout
class="org.apache.log4j.HTMLLayout">
</layout>
</appender>
<root>
<level
value="debug" />
<appender-ref
ref="appender1" />
</root>
</log4j:configuration>
特别说明:
为了提高效率,我们可以在写日志前增加判断:
Java
代码
- //
记录
debug
级别的信息 - if (logger.isDebugEnabled
()) { - logger.debug("This is debug message from Dao.");
- }
- //
记录
info
级别的信息 - if (logger.isInfoEnabled
()) { - logger.info("This is info message from Dao.");
- }
- //
记录
error
级别的信息 - logger.error("This is error message from Dao.");
另附一些详细东西:
1.java
中的应用
Logger.debug(Object
message);//
调试信息
Logger.info(Object message);//
一般信息
Logger.warn(Object message);//
警告信息
Logger.error(Object message);//
错误信息
Logger.fatal(Object message);//
致命错误信息
2
、配置根
Logger
,其语法为:
log4j.rootLogger = [ level ] , appenderName1,
appenderName2, …
level :
是日志记录的优先级,分为
OFF
、
FATAL
、
ERROR
、
WARN
、
INFO
、
DEBUG
、
ALL
或者您定义的级别。
Log4j
建议只使用四个级别,优
先级从高到低分别是
ERROR
、
WARN
、
INFO
、
DEBUG
。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定
义了
INFO
级别,则应用程序中所有
DEBUG
级别的日志信息将不被打印出来。
appenderName:
就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
例如:
log4j.rootLogger
=
info,A1,B2,C3
3
、配置日志信息输出目的地,其语法为:
log4j.appender.appenderName =
fully.qualified.name.of.appender.class //
"fully.qualified.name.of.appender.class"
可以指定下面五个目的地中的一个:
1.org.apache.log4j.ConsoleAppender
(控制台)
2.org.apache.log4j.FileAppender
(文件)
3.org.apache.log4j.DailyRollingFileAppender
(每天产生一个日志文件)
4.org.apache.log4j.RollingFileAppender
(文件大小到达指定尺寸的时候产生一个新的文件)
5.org.apache.log4j.WriterAppender
(将日志信息以流格式发送到任意指定的地方)
1.ConsoleAppender
选项
Threshold=WARN:
指定日志消息的输出最低层次。
ImmediateFlush=true:
默认值是
true,
意谓着所有的消息都会被立即输出。
Target=System.err
:默认情况下是:
System.out,
指定输出控制台
2.FileAppender
选项
Threshold=WARN:
指定日志消息的输出最低层次。
ImmediateFlush=true:
默认值是
true,
意谓着所有的消息都会被立即输出。
File=mylog.txt:
指定消息输出到
mylog.txt
文件。
Append=false:
默认值是
true,
即将消息增加到指定文件中,
false
指将消息覆盖指定的文件内容。
3.DailyRollingFileAppender
选项
Threshold=WARN:
指定日志消息的输出最低层次。
ImmediateFlush=true:
默认值是
true,
意谓着所有的消息都会被立即输出。
File=mylog.txt:
指定消息输出到
mylog.txt
文件。
Append=false:
默认值是
true,
即将消息增加到指定文件中,
false
指将消息覆盖指定的文件内容。
DatePattern='.'yyyy-ww:
每周滚动一次文件
,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
1)'.'yyyy-MM:
每月
2)'.'yyyy-ww:
每周
3)'.'yyyy-MM-dd:
每天
4)'.'yyyy-MM-dd-a:
每天两次
5)'.'yyyy-MM-dd-HH:
每小时
6)'.'yyyy-MM-dd-HH-mm:
每分钟
4.RollingFileAppender
选项
Threshold=WARN:
指定日志消息的输出最低层次。
ImmediateFlush=true:
默认值是
true,
意谓着所有的消息都会被立即输出。
File=mylog.txt:
指定消息输出到
mylog.txt
文件。
Append=false:
默认值是
true,
即将消息增加到指定文件中,
false
指将消息覆盖指定的文件内容。
MaxFileSize=100KB:
后缀可以是
KB, MB
或者是
GB.
在日志文件到达该大小时,将会自动滚动,即将原来的内容移到
mylog.log.1
文件。
MaxBackupIndex=2:
指定可以产生的滚动文件的最大数。
实际应用:
log4j.appender.A1=org.apache.log4j.ConsoleAppender
//
这里指定了日志输出的第一个位置
A1
是控制台
ConsoleAppender
3
、配置日志信息的格式,其语法为:
A. log4j.appender.appenderName.layout
= fully.qualified.name.of.layout.class
"fully.qualified.name.of.layout.class"
可以指定下面
4
个格式中的一个:
1.org.apache.log4j.HTMLLayout
(以
HTML
表格形式布局),
2.org.apache.log4j.PatternLayout
(可以灵活地指定布局模式),
3.org.apache.log4j.SimpleLayout
(包含日志信息的级别和信息字符串),
4.org.apache.log4j.TTCCLayout
(包含日志产生的时间、线程、类别等等信息)
1.HTMLLayout
选项
LocationInfo=true:
默认值是
false,
输出
java
文件名称和行号
Title=my app file:
默认值是
Log4J Log Messages.
2.PatternLayout
选项
ConversionPattern=%m%n :
指定怎样格式化指定的消息。
3.XMLLayout
选项
LocationInfo=true:
默认值是
false,
输出
java
文件和行号
实际应用:
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r
%-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
这里需要说明的就是日志信息格式中几个符号所代表的含义:
-
X
号
: X
信息输出时左对齐;
%p:
输出日志信息优先级,即
DEBUG
,
INFO
,
WARN
,
ERROR
,
FATAL,
%d:
输出日志时间点的日期或时间,默认格式为
ISO8601
,也可以在其后指定格式,比如:
%d{yyy MMM dd HH:mm:ss,SSS}
,输出类似:
2002
年
10
月
18
日
22
:
10
:
28
,
921
%r:
输出自应用启动到输出该
log
信息耗费的毫秒数
%c:
输出日志信息所属的类目,通常就是所在类的全名
%t:
输出产生该日志事件的线程名
%l:
输出日志事件的发生位置,相当于
%C.%M(%F:%L)
的组合
,
包括类目名、发生的线程,以及在代码中的行数。举例:
Testlog4.main(TestLog4.java:10)
%x:
输出和当前线程相关联的
NDC(
嵌套诊断环境
),
尤其用到像
java servlets
这样的多客户多线程的应用中。
%%:
输出一个
"%"
字符
%F:
输出日志消息产生时所在的文件名称
%L:
输出代码中的行号
%m:
输出代码中指定的消息
,
产生的日志具体信息
%n:
输出一个回车换行符,
Windows
平台为
"/r/n"
,
Unix
平台为
"/n"
输出日志信息换行
可以在
%
与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1)%20c
:指定输出
category
的名称,最小的宽度是
20
,如果
category
的名称小于
20
的话,默认的情况下右对齐。
2)%-20c:
指定输出
category
的名称,最小的宽度是
20
,如果
category
的名称小于
20
的话,
"-"
号指定左对齐。
3)%.30c:
指定输出
category
的名称,最大的宽度是
30
,如果
category
的名称大于
30
的话,就会将左边多出的字符截掉,但小于
30
的话也不会有空格。
4)%20.30c:
如果
category
的名称小于
20
就补空格,并且右对齐,如果其名称长于
30
字符,就从左边交远销出的字符截掉。
这里上面三个步骤是对前面
Log4j
组件说明的一个简化;下面给出一个具体配置例子,在程序中可以参照执行:
log4j.rootLogger=INFO,A1
,
B2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r
%-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
4. #
当输出信息于回滚文件时
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
//
指定以文件的方式输出日志
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
//
文件位置
,
也可以用变量
${java.home}
、
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
5. Log4j
比较全面的配置
LOG4J
的配置之简单使它遍及于越来越多的应用中了:
Log4J
配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了,
log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true
#
应用于控制台
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.CONSOLE.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.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
# Use this layout for LogFactor 5 analysis
#
应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log //
文件位置
,
也可以用变量
${java.home}
、
rolling.log
log4j.appender.ROLLING_FILE.Append=true
//true:
添加
false:
覆盖
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
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
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
# Log
Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
#
发送日志给邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
www.wuset.com
">log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
www.wusetu.com
">log4j.appender.MAIL.To=web@www.wusetu.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
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES
('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c
-%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
#
自定义
Appender
log4j.appender.im =
net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host =
mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient =
corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r
[%t] %-5p %c %x - %m%n
log4g的更多相关文章
- log4g:站在巨人的头上实现一个可配置的Go日志库
更多精彩博文,欢迎访问我的个人博客 前言 本人Java程序员一枚,眼看着这几年Go的势头不错,本着技多不压身的原则,也随大流慢慢学习.不得不说Go其实跟Java差别还是挺大的,毕竟习惯了面向对象的思想 ...
- maven log4g 用法
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> & ...
- log4g 使用教程
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网站:jakarta.apache.org/log4j 可以免费下载到Log ...
- 黑马程序员_JavaIO流(三)
字节流File读写操作 字符流: FileReader FileWriter BufferedReader BufferedWrtier 字节流: FileInputStream FileOutput ...
- myeclipse中控制台日志比实际晚8小时解决方法及java日志处理
今天终于忍不住要解决myeclipse控制台中日志显示比实际晚8小时的问题,开始以为myeclipse编辑器时间问题,后来想想不对,myeclipse控制台打印的是tomcat的日志,随后以为是log ...
- MySql单表最大8000W+ 之数据库遇瓶颈记
前言 昨晚救火到两三点,早上七点多醒来,朦胧中醒来发现电脑还开着,赶紧爬起来看昨晚执行的SQL命令结果.由于昨晚升级了阿里云的RDS,等了将近两个小时 还在 升降级中,早上阿里云那边回复升级过程中出现 ...
- Atitit s2018.5 s5 doc list on com pc.docx v2
Atitit s2018.5 s5 doc list on com pc.docx Acc 112237553.docx Acc Acc 112237553.docx Acc baidu ne ...
- Atitit s2018.5 s5 doc list on com pc.docx Acc 112237553.docx Acc baidu netdisk.docx Acc csdn 18821766710 attilax main num.docx Atiitt put post 工具 开发工具dev tool test.docx Atiitt 腾讯图像分类相册管家.docx
Atitit s2018.5 s5 doc list on com pc.docx Acc 112237553.docx Acc baidu netdisk.docx Acc csdn 1882 ...
- 二、springBoot 整合 mybatis 项目实战
前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用的是jdbcTemplate.项目中肯定不会这样使用,上篇文章 ...
随机推荐
- TPCH Benchmark with Impala
1. 生成测试数据在TPC-H的官网http://www.tpc.org/tpch/上下载dbgen工具,生成数据http://www.tpc.org/tpch/spec/tpch_2_17_0.zi ...
- C# UdpClient使用Receive和BeginReceive接收消息时的不同写法
使用Receive(同步阻塞方式), 注意使用同步方法时,需要使用线程来开始方法,不然会使UI界面卡死 IPEndPoint RemoteIpEndPoint = ); UdpClient udpCl ...
- FFmpeg:初步编译使用[Android]
1.安装NDK:http://dl.google.com/android/ndk/android-ndk-r9-linux-x86.tar.bz2 sudo gedit ~/.bashrc 末尾添加: ...
- javamail 发送附件
1.属性文件 mail.protocol=smtpmail.host=mail.port=mail.auth=truemail.timeout=25000mail.username=mail.pass ...
- 数据存储之CoreData
#import "ViewController.h" #import <CoreData/CoreData.h> #import "Person.h" ...
- 排序系列 之 折半插入排序算法 —— Java实现
基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...
- entity framework 新手入门篇(2)-entity framework基本的增删改查
经过前两节的简单描述,终于可以进入entity framework的使用部分了.本节将对entity framework原生的增删改查进行讲解. 承接上面的部分,我们有一个叫做House的数据库,其中 ...
- MFC之TreeCtrl控件使用经验总结
树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点.MFC中使用CTreeCtrl类来封装树形控件的各种操作.通过调用BOOL ...
- std::vector<bool>中的坑
http://www.cplusplus.com/reference/vector/vector/?kw=vector C++中,vector<bool>为了达到节省内存的目的,专门做了特 ...
- 【转】C#多线程学习
C#多线程学习(一) 多线程的相关概念 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序 ...