原因:1、commons-logging功能较弱
2、log4j功能强大。
所需jar:
commons-logging-1.1.1.jar
1、提供一个统一的日志接口,简化操作。
2、自动选择适当的日志实现系统
1)首先在classpath中查找commons-logging.properties文件,如果找到,则使用其中定义的Log实现类
2)如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则
使用其定义的Log实现类。
3)如果上述实现类都找不到,则会查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类
4)如果上述都没,则使用JDK自身的日志实现类(jdk1.4之后出现日志实现类)
5)最后,如果上述都找不到,则会使用commons-logging自己提供的一个简单的日志实现类SimpleLog
3、可以不用配置。
三、使用:
1、导入相关类
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
2、创建静态成员
private static Log log = LogFactory.getLog(LogTest.class);//括号中的class一般使用当前类的class
3、使用log对象的debug、info、warn、error、fatal方法操作日志。
Log使用Excemple:
package test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
public class Log4jTest {
private static Log logger = LogFactory.getLog(Log4jTest.class);
@Test
public void testLog4j(){
logger.info("info message");
logger.debug("debug message");
logger.warn("warn message");
logger.error("error message");
logger.fatal("fatal message");
logger.info(Logger.getRootLogger());
}
}
本例中使用到的是Log4j的日志实现,对于Log4j,必须在classpath路径下配置log4j.properties文件,如果该文件配置如下:
log4j.rootLogger=debug,my
### direct log messages to my ###
#message out to console
log4j.appender.my=org.apache.log4j.ConsoleAppender
log4j.appender.my.Target=System.out
log4j.appender.my.layout=org.apache.log4j.PatternLayout
log4j.appender.my.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n
则控制台输出为:
2015-01-13 16:00:11,378 INFO Log4jTest:13 - info message
2015-01-13 16:00:11,382 DEBUG Log4jTest:14 - debug message
2015-01-13 16:00:11,382 WARN Log4jTest:15 - warn message
2015-01-13 16:00:11,382 ERROR Log4jTest:16 - error message
2015-01-13 16:00:11,382 FATAL Log4jTest:17 - fatal message
2015-01-13 16:00:11,382 INFO Log4jTest:18 - org.apache.log4j.spi.RootLogger@7038b9
如果log4j.properties配置如下:
log4j.rootLogger=info,my
### direct log messages to my ###
#message out to console
log4j.appender.my=org.apache.log4j.ConsoleAppender
log4j.appender.my.Target=System.out
log4j.appender.my.layout=org.apache.log4j.PatternLayout
log4j.appender.my.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n
则控制台输出结果为:
2015-01-13 16:53:50,604 INFO Log4jTest:14 - info message
2015-01-13 16:53:50,609 WARN Log4jTest:16 - warn message
2015-01-13 16:53:50,609 ERROR Log4jTest:17 - error message
2015-01-13 16:53:50,609 FATAL Log4jTest:18 - fatal message
2015-01-13 16:53:50,610 INFO Log4jTest:19 - org.apache.log4j.spi.RootLogger@7038b9
由此可见,当为debug级别的时候输出信息较多。下面会详细介绍log4j配置文件的信息。
上述代码虽然没有接触到Log4j,但Log的实现确实是由Log4j完成的。但是如果使用Log4j则必须配置log4j.properties文件,则在查找是否已定义系统环境变量org
否则将会发生异常。
四、Log4j中三个主要组件:Logger、Appender、Layout
Log4j允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。
例如:名称为"mylog.ylog"就是"mylog"的children。Log4j的rootLogger相当于java的Object。
Appender:将log信息存放到什么地方,一个Logger可以拥有多个Appender,也是说我们既可以将信息输出到控制台,也可以输出到一个文件中
Layout: 控制log信息的输出方式,即格式化输出信息。
输出级别的种类:
error:严重错误
warn:一般警告
info:一般要显示的信息
debug:程序的调试信息
配置日志输出目的地:
log4j.appender.appenderName = 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(将日志信息以流格式发送到任意指定的地方)
配置日志信息格式:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
控制台选项
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
FileAppender 选项
Threshold=DEBUF:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
RollingFileAppender 选项
Threshold=DEBUG:指定日志消息的输出最低层次。
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.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
Log例子
###################
# Console Appender
###################
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
#####################
#####################
# File Appender
#####################
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
########################
# Rolling File
########################
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 Appender
####################
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
########################
# SMTP Appender
#######################
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
[email=log4j.appender.MAIL.From=chenyl@yeqiangwei.com]log4j.appender.MAIL.From=chenyl@yeqiangwei.com[/email]
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
[email=log4j.appender.MAIL.To=chenyl@yeqiangwei.com]log4j.appender.MAIL.To=chenyl@yeqiangwei.com[/email]
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
########################
# JDBC Appender
#######################
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@yeqiangwei.com
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
最后文件路径设置问题
System.setProperty("DeployDirectory", "../");
log4j.appender.ROLLING_FILE.File=${DeployDirectory}
缀:
log4j.rootLogger=error,A2,files,DATABASE
log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
#for file
log4j.appender.files.layout=org.apache.log4j.PatternLayout
log4j.appender.files.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.files=org.apache.log4j.RollingFileAppender
log4j.appender.files.File=ccexample.log
log4j.appender.files.MaxFileSize=1KB
#for file every day
log4j.appender.everyday=org.apache.log4j.DailyRollingFileAppender
log4j.appender.everyday.layout=org.apache.log4j.PatternLayout
log4j.appender.everyday.File=myloggers.log
log4j.appender.everyday.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.everyday.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.everyday.MaxFileSize=1KB
#for database
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.BufferSize=10
log4j.appender.DATABASE.URL=jdbc:oracle:thin:@127.0.0.1:1521:orcl2
log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.user=qp
log4j.appender.DATABASE.password=qp
log4j.appender.DATABASE.sql=INSERT INTO tbl_log VALUES ('%m')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
在开发中使用的
################################################################
########### logger choose ###################
################################################################
log4j.rootLogger=INFO, A2
################################################################
########### A1 : Console Appender ###################
################################################################
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%t] [%C::%M] %m%n
################################################################
########### A2 : License File Appender #############
################################################################
log4j.appender.A2.Threshold=INFO
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=${SYSTEMROOT}logs${SYSTEMSEPARATOR}sysdebug.log
log4j.appender.A2.MaxFileSize=10240KB
log4j.appender.A2.MaxBackupIndex=100
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%t] [%C::%M] %m%n
log4j.logger.com.mchange.v2=DEBUG, C1
log4j.appender.C1.Threshold=DEBUG
log4j.appender.C1=org.apache.log4j.RollingFileAppender
log4j.appender.C1.File=${SYSTEMROOT}logs${SYSTEMSEPARATOR}c3p0debug.log
log4j.appender.C1.MaxFileSize=204800KB
log4j.appender.C1.MaxBackupIndex=100
log4j.appender.C1.layout=org.apache.log4j.PatternLayout
log4j.appender.C1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%t] [%C::%M] %m%n
Log4J简单使用的更多相关文章
-
Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
-
Log4j简单配置
Log4j是一组强大的日志组件,在项目中时常需要用它提供一些信息,这两天学习了一下它的简单配置. 第一步,我们需要导入log4j-1.2.14.jar到lib目录下 第二步,在src下建立log4j. ...
-
Log4j 简单应用
#输出日志的包路径log4j.logger.com=DEBUG,FILE log4j.rootLogger=WARN,stdout #控制台日志 log4j.appender.stdout=org.a ...
-
Log4j简单配置解析
log4j.rootLogger=ERROR, stdoutlog4j.logger.tk.mybatis.simple.mapper=TRACElog4j.appender.stdout=org.a ...
-
java日志之log4j简单使用
1.导入包log4j.jar 2.src同级创建并设置log4j.properties ### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控 ...
-
log4j 简单用法
maven添加必要库: <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <gro ...
-
[log4j]log4j简单配置
步骤: 1.导入jar包:log4j-1.2.17.jar 2.编写log4j配置文件:log4j.properties ### set log levels - for more verbose l ...
-
log4j简单的使用
1.引入log4j.jar包 2.在类中使用 package com.donghai.log4j; import org.apache.log4j.Logger; public class LogTe ...
-
Log4j日志管理的简单实例
大型项目中非常多情况下要分析程序的日志信息,怎样管理自己的日志信息至关重要. 在应用程序中加入日志记录总的来说基于三个目的 , 监视代码中变量的变化情况,周期性的记录到文件里供其它应用进行统计分析工作 ...
随机推荐
-
iOS runtime实用篇解决常见Crash
程序崩溃经历 其实在很早之前就想写这篇文章了,一直拖到现在. 程序崩溃经历1 平时开发测试的时候好好的,结果上线几天发现有崩溃的问题,其实责任大部分在我身上. 我的责任: 过分信赖文档,没进行容错处理 ...
-
JavaScript中作用域和作用域链解析
学习js,肯定要学习作用域,js作用域和其他的主流语言的作用域还存在很大的区别. 一.js没有块级作用域. js没有块级作用域,就像这样: if(){ : console.log(a) //输出100 ...
-
CentOS7使用无线网卡
1.安装CentOS7最小化时候,在网络连接功能项中设置WIFI的设备和密码. 2.进入系统,执行nmcli查看使用NetworkManager管理的网络 [root@seastar ~] nmcli ...
-
JBoss AS 7性能调优(三)
原文:http://www.mastertheboss.com/jboss-performance/jboss-as-7-performance-tuning/page-4 调优Webserver线程 ...
-
hdu1251统计难题
Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己 ...
-
似懂非懂的Comparable与Comparator
jdk1.8.0_41 一知半解写代码, 集合排序用个啥. 抄起键盘胡乱打, 似懂非懂最可怕. Comparable与Comparator都是用于集合的排序,对于大多数人来说Comparator可能略 ...
-
如何杀死oracle死锁进程
方法一:Oracle的死锁非常令人头疼,总结了一些点滴经验作为学习笔记 1.查哪个过程被锁查V$DB_OBJECT_CACHE视图: '; 2. 查是哪一个SID,通过SID可知道是哪个SESSION ...
-
Win7下的flutter环境安装配置
随着 2018 年底 GOOGLE 正式发布了 flutter1.0,这个原生开发框架大火,试用了一下确实不错,代码状态即时刷新,所见即所得.APP 开发的环境安装,比较复杂,很多初学者在这一步就被 ...
-
【Android】20.4 录音
分类:C#.Android.VS2015: 创建日期:2016-03-13 一.简介 利用Android提供的MediaRecorder类可直接录制音频. 1.权限要求 录制音频和视频需要下面的权限: ...
-
Spyder在windows下常用快捷键
块注释/反块注释:Ctrl+4/5 行注释/反行注释:Ctrl+1 代码提示:Tab 复制一行:Ctrl+Alt+↓/↑ 删除一行:Ctrl+D 运行:F5 全屏:F11 撤销:Ctrl+Z 反撤销: ...