普通Log4j的使用
先来看看log4j使用的配置信息
#Appender : 为日志输出地 , Log4j提供的appender有如下几种 :
#org.apache.log4j.ConsoleAppender : 控制台
#org.apache.log4j.FileAppender : 文件
#org.apache.log4j.DailyRollingFileAppender : 每天产生一个日志文件
#org.apache.log4j.RollingFileAppender : 文件大小达到指定尺寸的时候产生一个新的文件
#org.apache.log4j.WriterAppender : 将日志信息以流格式发送到任意指定的地方
#Layout : 日志输出格式 , Log4j提供的layout有以下几种 :
#org.apache.log4j.HTMLLayout : 以HTML表格形式布局
#org.apache.log4j.PatternLayout : 可以灵活的指定布局模式
#org.apache.log4j.SimpleLayout : 包含日志信息的级别和信息字符串
#org.apache.log4j.TTCCLayout : 包含日志产生的时间,线程,类别等信息.
#打印参数 : Log4j采用类似C语言中print函数的打印格式格式化打印日志信息 :
# %m : 输出代码中指定的消息 .
# %p : 输出优先级别,即DEBUG , INFO , WARN , ERROR , FATAL.
# %r : 输出自应用启动到输出该log信息耗费的毫秒数.
# %c : 输出所属的类目 , 通常就是所在类的全名.
# %t : 输出产生该日志事件的线程名.
# %n : 输出一个回车换行符 , windows平台为"/r/n" ,Linux平台为"/n"
# %d : 输出日志时间点的日期或时间,默认格式为"ISO8601",也可以在其后指定格式,比如:"%d{yyyy MM dd HH:mm:ss}",输出的类似于"2002年10月18日 22:10:28"
# %l : 输出日志事件的发生位置,包含类目名,发生时间,发生的线程,以及在代码中的行数.
真实配置使用信息
注意 : 该配置可以直接使用,一天生成一个配置文件.
#####输出到控制台#####
log4j.rootLogger=DEBUG,CONSOLE,ARKSERVICES
log4j.addivity.org.apache=true
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %p %l - %m%n
#####输出到文件#####
log4j.appender.ARKSERVICES=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ARKSERVICES.DatePattern='.'yyyy-MM-dd
log4j.appender.ARKSERVICES.File=./testlog.log
log4j.appender.ARKSERVICES.Threshold=debug
log4j.appender.ARKSERVICES.layout=org.apache.log4j.PatternLayout
log4j.appender.ARKSERVICES.layout.ConversionPattern=%d %p - %m%n
限制log文件大小 和 log文件数量..
#####输出到控制台#####
log4j.rootLogger=DEBUG,CONSOLE,ARKSERVICES
log4j.addivity.org.apache=true
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %p %l - %m%n
#####输出到文件#####
log4j.appender.ARKSERVICES=org.apache.log4j.RollingFileAppender
log4j.appender.ARKSERVICES.File=./log/log4j.log
log4j.appender.ARKSERVICES.Threshold=DEBUG
log4j.appender.ARKSERVICES.MaxBackupIndex=3
log4j.appender.ARKSERVICES.MaxFileSize=100KB
log4j.appender.ARKSERVICES.layout=org.apache.log4j.PatternLayout
log4j.appender.ARKSERVICES.layout.ConversionPattern=%d %p %l - %m%n
有时候项目很大,有很多的模块怎么办?各自模块打印各自的日志
我这个日志有些不足之处,要是有更好的方法,请告诉我...
不同模块存放不同日志文件
log4j.rootCategory=debug, stdout
log4j.addivity.org.apache=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l - %m%n
log4j.logger.cxfframe=debug,cxfframe
log4j.appender.cxfframe=org.apache.log4j.DailyRollingFileAppender
log4j.appender.cxfframe.File=./log/cxfframe.log
log4j.appender.cxfframe.layout=org.apache.log4j.PatternLayout
log4j.appender.cxfframe.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l - %m%n
log4j.addivity.cxfframe=true
log4j.logger.gis=INFO,gis
log4j.appender.gis=org.apache.log4j.DailyRollingFileAppender
log4j.appender.gis.File=./log/gis.log
log4j.appender.gis.layout=org.apache.log4j.PatternLayout
log4j.appender.gis.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l - %m%n
log4j.addivity.gis=true
代码中如何使用呢?
加载是一样的,只是在调用的时候,这样子:
privatestatic final Logger logger = Logger.getLogger("gis");
参数传递的是模块名
代码加载例子log4j的jar包自己加哦....
public static void main(String[] args) {
/* 普通使用Log4j的加载方法 */
PropertyConfigurator.configure("./log4j.properties");
Logger logger = Logger.getLogger(TestSlf4j.class);
logger.info("456");
logger.debug("123");
}
后面问题来了,线上程序有问题,需要定位,但是日志级别是info,想调整为debug,但又不能重启程序,怎么办呢?
给log4j配置一个监听器就好了,自动检测配置文件
Log4j 动态更新
在加载logger日志之后,加一个监听器就好了…
PropertyConfigurator.configure(log4jPath);
PropertyConfigurator .configureAndWatch(log4jPath,1000);
第二个参数是检查时间的间隔