log4j.log4j自定义appenderr.stdout.Target = System.out 是起什么作用的

1.参考文献:
2.Commons-Loggin简介
Apache针对不同的语言平台为做了一系列日志工具包,可应用于java、.net、php、c++,这些日志包都是免费的,使用非常方便,可以极大提高编程效率。并且,Apache为了让众多的日志工具有一个相同操作方式,还实现做了一个通用日志工具包:commons-logging,也称Jakarta Commons Logging (JCL)。commons-logging是为那些需要建立在不同环境下使用不同日志架构的组件或库的开发者创建的,其中包括Apache Log4j以及Java
log的日志架构。把日志信息commons-logging的Log接口,并由commons-logging在运行时决定使用哪种日志架构。现在,Apache通用日志工具commons-logging和Log4j已经成为Java日志的标准工具。
3.快速入门
JCL有两个基本的抽象类:Log(基本记录器)和LogFactory(负责创建Log实例)。当commons-logging.jar被加入到CLASSPATH(通常将commons-logging.jar放在web project下的WebContent\WEB-INF\lib目录中)之后,它会合理地猜测你想用的日志工具,然后进行自我设置,用户根本不需要做任何设置。默认的LogFactory是按照下列的步骤去发现并决定那个日志工具将被使用的(按照顺序,寻找过程会在找到第一个工具时中止,这个顺序非常重要):
寻找当前factory中名叫mons.logging.Log配置属性的值寻找系统中属性中名叫mons.logging.Log的值如果应用程序的classpath中有log4j,则使用相关的包装(wrapper)类(Log4JLogger)如果应用程序运行在jdk1.4的系统中,使用相关的包装类(Jdk14Logger)使用简易日志包装类(SimpleLog)
上述的加载顺序可以通过commons-logging中LogSource.java的源代码可以看出,源代码如下,具体可以参考注释:
package log.
public class ca {
// Is Log4J Available?用户Log4J是否可用
* 通过Class.forName(&org.apache.log4j.Logger&))来查找Log4J,
* 只有将log4j.jar添加到classpath以后才能找到,
* 这也是为什么默认情况下只要将log4j.jar文件放在lib文件夹中
* 而不需要在common-logging.properties配置文件中进行配置就能自动使用log4j的原因
if (null != Class.forName(&org.apache.log4j.Logger&)) {
log4jIsAvailable = true;
log4jIsAvailable = false;
} catch (Throwable t) {
log4jIsAvailable = false;
// Is JDK 1.4 Logging Available?原来同上面的Log4J
if ((null != Class.forName(&java.util.logging.Logger&)) &&
(null != Class.forName(&mons.logging.impl.Jdk14Logger&))) {
jdk14IsAvailable = true;
jdk14IsAvailable = false;
} catch (Throwable t) {
jdk14IsAvailable = false;
// Set the default Log implementation,通过common-logging.properties配置文件来决定日志实现方式
String name = null;
name = System.getProperty(&mons.logging.log&);
if (name == null) {
name = System.getProperty(&mons.logging.Log&);
} catch (Throwable t) {
if (name != null) {
setLogImplementation(name);
} catch (Throwable t) {
setLogImplementation
(&mons.logging.impl.NoOpLog&);
} catch (Throwable u) {
if (log4jIsAvailable) {//如果log4j可用,默认优先使用Log4JLogger
setLogImplementation
(&mons.logging.impl.Log4JLogger&);
} else if (jdk14IsAvailable) {//第二优先使用Jdk14Logger
setLogImplementation
(&mons.logging.impl.Jdk14Logger&);
} else {//最后使用commoms-logging中的自带的实现,但它不进行任何操作
setLogImplementation
(&mons.logging.impl.NoOpLog&);
} catch (Throwable t) {
setLogImplementation
(&mons.logging.impl.NoOpLog&);
} catch (Throwable u) {
mons.logging.Log的具体实现大致有如下几类:
-mons.logging.impl.Jdk14Logger:使用JDK1.4。-mons.logging.impl.Log4JLogger:使用Log4J。-mons.logging.impl.Log4JCategoryLog:使用Log4J,该实现已被弃用,推荐使用Log4JLogger-mons.logging.impl.LogKitLogger:使用&avalon-Logkit。-mons.logging.impl.SimpleLog:common-logging自带日志实现类。它实现了Log接口,把日志消息都输出到系统错误流System.err&中。&-mons.logging.impl.NoOpLog:common-logging自带日志实现类。它实现了Log接口。&其输出日志的方法中不进行任何操作。
4.信息级别
  确保日志信息在内容上和反应问题的严重程度上的恰当,是非常重要的。log4j主要有如下的信息级别:
fatal:非常严重的错误,导致系统中止。期望这类信息能立即显示在状态控制台上。error:其它运行期错误或不是预期的条件。期望这类信息能立即显示在状态控制台上。warn:使用了不赞成使用的API、非常拙劣使用API, '几乎就是'错误,&其它运行时不合需要和不合预期的状态但还没必要称为&&错误&。期望这类信息能立即显示在状态控制台上。info:运行时产生的有意义的事件。期望这类信息能立即显示在状态控制台上。debug:系统流程中的细节信息。期望这类信息仅被写入log文件中。trace:更加细节的信息。期望这类信息仅被写入log文件中。
  通常情况下,我们希望将info级别以上的日志信息输出到控制台,而debug级别以上的信息写入到log文件中,而error信息写入到一个单独的文件中去,下面我们的实例将会实现这样的功能。
4.使用commons-logging结合log4j进行开发
4.1. 下载必要的jar包
&&&下载commons-logging.jar和log4j.jar包,然后把它们放到工程的lib目录下,引入工程中。
4.2. 编写common-logging.properties配置文件
  在属性文件common-logging.properties中设置实现接口的类。如下(这里设置Log4j为所使用的日志包):
mons.logging.Log=mons.logging.impl.Log4JLogger
  这里需要注意的是,如果common-logging.properties配置使用Log4JCategoryLog,会报错误,具体见参考文献4。配置如下:
mons.logging.Log=mons.logging.impl.Log4JCategoryLog
  在第三节中我们讲到如何在项目中引入了log4j.jar,那么common-logging默认会使用log4j最为日志实现方式。
4.3.log4j.properties配置实现日志的不同输出形式
前面我们讲到要求在控制台输入info级别的日志,然后有一个log.log记录debug级别以上的日志,一个error.log记录error级别以上的日志。log4j.properties配置如下:
### set log levels ###
log4j.rootLogger = debug , stdout , D , E
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
## 输出INFO级别以上的日志
log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/logs/log.log
log4j.appender.D.Append = true
## 输出DEBUG级别以上的日志
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
### 保存异常信息到单独文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
## 异常日志文件名
log4j.appender.E.File = D:/logs/error.log
log4j.appender.E.Append = true
## 只输出ERROR级别以上的日志!!!
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
4.4.单独使用log4j实例:Log4jTest.java
package log.
import org.apache.log4j.L
public class Log4jTest {
private static Logger log = Logger.getLogger(Log4jTest.class);
public void log() {
log.debug(&Debug info.&);
(&Info info&);
log.warn(&Warn info&);
log.error(&Error info&);
log.fatal(&Fatal info&);
public static void main(String[] args) {
Log4jTest test = new Log4jTest();
test.log();
mon-logging结合log4j实例:JCLTest.java
package log.
import mons.logging.L
import mons.logging.LogF
public class JCLTest {
private static Log log = LogFactory.getLog(JCLTest.class);
public void log(){
log.debug(&Debug info.&);
(&Info info&);
log.warn(&Warn info&);
log.error(&Error info&);
log.fatal(&Fatal info&);
public static void main(String[] args) {
JCLTest test = new JCLTest();
test.log();
说明:4.4和4.5的输出结果是一样的。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4483次
排名:千里之外
转载:10篇
(1)(2)(1)(1)(2)(5)(1)(1)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&可以先附上一个log4j2的资源文件详细内容,对照着看
1 ### set log levels ###
2 log4j.rootLogger = INFO , C , D , E
4 ### console ###
5 log4j.appender.C = org.apache.log4j.ConsoleAppender
6 log4j.appender.C.Target = System.out
7 log4j.appender.C.layout = org.apache.log4j.PatternLayout
8 log4j.appender.C.layout.ConversionPattern = [Third][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n
10 ### log file ###
11 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
12 log4j.appender.D.File = ../logs/springmvc_hibernate_demo.log
13 log4j.appender.D.Append = true
14 log4j.appender.D.Threshold = INFO
15 log4j.appender.D.layout = org.apache.log4j.PatternLayout
16 log4j.appender.D.layout.ConversionPattern = [Third][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n
18 ### exception ###
19 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
20 log4j.appender.E.File = ../logs/springmvc_hibernate_demo_error.log
21 log4j.appender.E.Append = true
22 log4j.appender.E.Threshold = ERROR
23 log4j.appender.E.layout = org.apache.log4j.PatternLayout
24 log4j.appender.E.layout.ConversionPattern =[Third][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n
1、log4j.rootLogger=INFO, stdout, R&&& 将等级为INFO的日志信息使用stdout和R进行输出,这里可以自己命名;&&&& 等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,OFF是关闭,不输出任何信息,其他级别按这个顺序依次降低,如果指定一个级别,如INFO,则比该级别高的信息都会输出,此时会输出FATAL、ERROR、WARN、INFO级别的信息。&2、log4j.appender.stdout=org.apache.log4j.ConsoleAppender&&& log4j.appender.stdout.option1=value1&&& 定义stdout的输出端类型,以及属性选项配置,可以有下面几种类型:&&& org.apache.log4j.ConsoleAppender(输出在控制台)&&& org.apache.log4j.FileAppender(输出到文件)   &&& org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)   &&& org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件&&&&&& org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)&&& 输出端共同选项:&&& Threshold=WARN:指定日志消息的输出最低层次。&&& ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。&&& ConsoleAppender选项:&&& Target=System.err:默认情况下是:System.out,指定输出控制台&&&&&& 文件输出端共同选项:&&& File=mylog.txt:指定消息输出到mylog.txt文件。&&& Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。&&&&& DailyRollingFileAppender 选项:&&& 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: 每分钟&&& RollingFileAppender 选项:&&& MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。&&& MaxBackupIndex=2:指定可以产生的滚动文件的最大数。&3、log4j.appender.stdout.layout=org.apache.log4j.PatternLayout&&&& 定义stdout的输出端的layout是类型,可以有下面几种类型:&&& org.apache.log4j.HTMLLayout(以HTML表格形式布局),& org.apache.log4j.PatternLayout(可以灵活地指定布局模式),   &&& org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),   &&& org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)&4、log4j.appender.stdout.layout.ConversionPattern= [APPName] %p [%t] %C.%M(%L) | %m%n&&& 如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,具体参数:&&& %m 输出代码中指定的消息& %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL& %r 输出自应用启动到输出该log信息耗费的毫秒数& %c 输出所属的类目,通常就是所在类的全名&& %t 输出产生该日志事件的线程名& %n 输出一个回车换行符,Windows平台为"rn&,Unix平台为"n&& %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MM dd HH:mm:ss,SSS},输出类似:日 22:10:28,921   %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。&&& %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。&&& %%: 输出一个&%&字符&&& %F: 输出日志消息产生时所在的文件名称&&& %M: 输出执行方法&&& %L: 输出代码中的行号&&& 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:&&& 1) c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。&&& 2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,&-&号指定左对齐。&&& 3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。&&& 4) .30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。&&& [APPName]是log信息的开头,可以为任意字符,一般为项目简称。&5、log4j.appender.R=org.apache.log4j.DailyRollingFileAppender&6、log4j.appender.R.File=D:\\logs\\APPName.log&&& 定义R的输出端的文件名D:\\logs\\APPName.log,该名称可以自行修改。&7、log4j.appender.R.layout=org.apache.log4j.PatternLayout&8、log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n&9、.johnny=DEBUG&&& 自定义各个包中日志级别,指定com.johnny包下的所有类的等级为DEBUG。&
阅读(...) 评论()<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 log4j socketappender 的文章

 

随机推荐