Log4j基础知识
1.Logger:完成日志信息的处理
输出级别
off > fatal > error > warn > info > debug > trace > all
选定输出级别后,其以上的信息都会输出
好处:由于开发阶段输出的日志信息与产品阶段输出的日志信息是有很大区别的,所以可以进行区分
2.Appender:设置日志信息的去向
可以同时指定多个输出目的地
log4j.appender.appenderName = Appender.class
log4j.appender.appenderName.optin1 = value1
常用的:
org.apache.log4j.ConsoleAppender(将日志输出到控制台)
org.apache.log4j.FileAppender(将日志输出到文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件尺寸达到一定是产生一个日志文件)
org.apache.log4j.WriterAppender(将日志以串流格式发送到任意地方)
org.apache.log4j.JdbcAppender(将日志保存到数据库)
3.Layout:设置日志信息的输出样式
log4j.appender.appenderName.layout = Layout.class
log4j.appender.appenderName.layout.option1 = value1
常用的:
org.apache.log4j.HTMLLayout(以HTML格式输出)
org.apache.log4j.SimpleLayout(包含日志信息的级别和讯息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、执行绪、类别等)
org.apache.log4j.PatternLayout(灵活指定)
%p 输出优先级
%r 输出自应用启动到输出改日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
%f 输出日志信息所属的类别的类别名
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,指定格式的方式:%d{yyyy-MM-dd HH:mm:ss}
%l 输出日志事件的发生的位置,行号
%m 输出代码中的信息,即message
%n 输出一个换行号
Log4j测试
代码:
//获取此类的Class给Logger
private static Logger logger = Logger.getLogger(HelloLog4j.class);
public static void main(String[] args) {
System.out.println("This is println message");
logger.debug("This is debug message");
logger.warn("This is warn message");
logger.info("This is info message");
logger.error("This is error message");
}
配置文件:
log4j.rootLogger=debug,appender1
log4j.appender.appender1 = org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout = org.apache.log4j.TTCCLayout
Log4j在项目中的实际应用
加入配置文件:
#set log levels and appender(objective)
log4j.rootLogger=warn,appender1
#My# cope position(in file)
#A file daily : org.apache.log4j.DailyRollingFileAppender
log4j.appender.appender1 = org.apache.log4j.FileAppender
log4j.appender.appender1.File = F:/AIDE/201008_WaterConservation/workspaces/System.log
#My# css(custom file)
#%p-level %c-class name %d{yyyy-MM-dd HH:mm:ss}-date %l-line number %m-message %n-newline
log4j.appender.appender1.layout = org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern= %p %c %d{yyyy-MM-dd HH:mm:ss} %l %m %n
代码:
Logger logger = Logger.getLogger(this.getClass().getName());
/**
* 删除实体类
*/
public void delete(Object entity) {
try {
getHibernateTemplate().delete(entity);
if (logger.isInfoEnabled()) {
logger.info("保存对象:"+entity.getClass().getSimpleName()+":成功");
}
} catch (DataAccessException e) {
logger.warn("保存对象:"+entity.getClass().getSimpleName()+":出现异常",e);
e.printStackTrace();
}
}
Log4j注意事项
log4j对于程序的运行的性能影响非常小,可以通过以下方式降低性能影响。
在开发中虽然是根据log4j.properties的设置来进行输出,但是实际上每条输出都会执行,所以会对性能有一定的影响。
if (logger.isDebugEnabled()) {
logger.debug("This is debug message");
}
if (logger.isInfoEnabled()) {
logger.info("This is info message");
}
logger.warn("This is warn message");
logger.error("This is error message");