打印日志小结
来源:互联网 发布:淘宝致一科技 编辑:程序博客网 时间:2024/06/05 05:06
日志常用的五个级别:
DEBUG :为程序的调试信息,最低级,一般不输出,随意使用,任何有利与在调试的时候,了解系统状态的东西,比如变量之类,都可以输出看看
INFO :为一般要显示的信息,比如登录登出,当前状态给最终用户的,所以内容要看的明白
ERROR:为严重错误 主要是程序的错误
WARN :为一般警告,比如session丢失
FATAL:崩溃,整个程序终止运行
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。
需要导入log4j-1.2.17.jar包
Log4j 获得logger对象
在一个对象中通常只使用一个Logger对象,Logger应该是static final的,只有在少数需要在构造函数中传递logger的情况下才使用private final。
public class A {
private static Logger logger = Logger.getLogger(A.class);
}
Log4j 实例
package com.skyon.sql;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.log4j.Logger;
/**
* 调用oracle存储过程
* @author 余茂元
*
*/
public class Procddure {
private static Loggerlogger = Logger.getLogger(Procddure.class);
public static void main(String[]args) {
//进入方法
logger.debug(System.currentTimeMillis()+"entering main ");
Connection conn=null;
try {
//加载驱动
Class.forName(ConstantFile.getValueByKey("jdbc"));
//获取连接
conn=DriverManager.getConnection(ConstantFile.getValueByKey("url"),
ConstantFile.getValueByKey("username"),
ConstantFile.getValueByKey("password"));
System.out.println(conn);
if(conn==null){
logger.error(System.currentTimeMillis()+"get empty conn,check!!!");
}else{
//获取存储过程对象
CallableStatement c=conn.prepareCall("call wtf(?)");
logger.info(System.currentTimeMillis()+":"+c);
//给存储过程中的参数赋值
c.setString(1, ConstantFile.getValueByKey("id_no"));
//执行存储过程
c.execute();
}
} catch (Exception e) {
/**
* 异常通常不写e.printStackTrace();
*/
Logger.error(e.getMessage);//错误
Logger.error(“something”,e.getMessage);错误
//上面两种输出方式会丢失最重要的StackTrace信息
logger.error(System.currentTimeMillis()+"conn fail",e);
//不允许记录日志后再抛出异常,会导致多次记录,日志只允许记录一次
Throw new Exception(“something”,e);
//不允许出现System.out.println(e.Message);不允许出现e.printStackTrance();
}finally{
if(conn!=null){
try {
//关闭连接
conn.close();
} catch (SQLExceptione) {
e.printStackTrace();
}
}
}
}
}
Log4j配置文件log4j.proerpties文件,放在src/main/resource下面,不用配置,log4j框架会自动寻找并加载
Log4j.properties配置模板
# Root Logger
#可同时指定多个目的地 console,sql,html
log4j.rootLogger=debug,file
#log4j.rootLogger=file
#\u81EA\u5B9A\u4E49\u65E5\u5FD7\u8BB0\u5F55\u5668\uFF08\u533A\u5206\u5927\u5C0F\u5199\uFF09
#\u5BF9\u6307\u5B9A\u547D\u540D\u7A7A\u95F4\u4E2D\u7684\u8BED\u53E5\u8FDB\u884C\u65E5\u5FD7\u8BB0\u5F55
#log4j.logger.com.company.mybatisdemo.dao.MyadminDAO=error
#\u5BF9\u6307\u5B9A\u8BED\u53E5\u8FDB\u884C\u65E5\u5FD7\u8BB0\u5F55
#log4j.logger.com.company.mybatisdemo.dao.MyadminDAO.get=error
#log4j.appender.console=org.apache.log4j.ConsoleAppender
#log4j.appender.console.layout=org.apache.log4j.PatternLayout
#log4j.appender.console.layout.ConversionPattern=%5p [%t] - %m%n
#输出到文件
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
#按指定的格式输出
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#指定输出格式
log4j.appender.toFile.layout.ConversionPattern=%d %p [%c %M] %m %n
#文件会自动生成,直接指定路径即可
log4j.appender.file.File=E:\\error.log
输出到数据库
lo4j.rootLogger=debug,toJDBC
#输出到数据库
log4j.appender.toJDBC=org.apache.log4j.jdbc.JDBCAppender
#指明输出的格式
log4j.appender.toJDBC.layout=org.apache.log4j.PatternLayout
#数据源在数据库输出格式
log4j.appender.toJDBC.layout.ConversionPattern=%d %p [%c %M] %m %n
#指明驱动
log4j.appender.toJDBC.driver=net.sourceforge.jtds.jdbc.Driver
#数据库URL
log4j.appender.toJDBC.URL=jdbc:jtds:sqlserver://localhost:1433/pet
#数据库用户名
log4j.appender.toJDBC.user=sa
#数据库密码
log4j.appender.toJDBC.password=sa
#指定数据库sql语句
log4j.appender.toJDBC.sql=insert into loginfo(log4jinfo) values('%d %p [%c %M] %m %n')
输出到控制台,输出的是调试的信息
log4j.rootLogger=debug,toCon,
#配置Appendder的全路径ConsoleAppender:输出到控制台
log4j.appender.toCon=org.apache.log4j.ConsoleAppender
#说明输出的格式:SimpleLayout 简单格式,只有信息和级别的输出
log4j.appender.toCon.layout=org.apache.log4j.SimpleLayout
输出到网页
log4j.rootLogger=debug,html
#输出到HTML
log4j.appender.html=org.apache.log4j.DailyRollingFileAppender
#按指定的格式输出
log4j.appender.html.layout=org.apache.log4j.HTMLLayout
#指定输出格式
#log4j.appender.toFile.layout.ConversionPattern=%d %p [%c %M] %m %n
#指定文件输出文件路径
log4j.appender.html.file=Html/b.html
使用log
应该在程序的哪些地方添加日志的输出?
系统启动参数、环境变量
异常捕获处
调用函数时(函数的进出,需要的话查看变量的变化等)
关键操作(增删改查)
所有输入输出处,无论是从文件输入还是从网络等其他地方输入,执行命令处
异常处理处(捕获异常后,不要e.printStackTrace(),用logger.error输入到日志里面)
注:大部分人在程序里面会去写logger.error(exception),其实这个时候log4j会去把这个exception tostring。真正的写法应该是logger(message.exception);
输出什么内容?
通常情况下在程序日志里记录一些比较有意义的状态数据:程序启动,退出的时间点;程序运行消耗时间;耗时程序的执行进度;重要变量的状态变化。除此之外,在公共的日志里规避打印程序的调试或者提示信息。
日志性能的考虑,如果代码为核心代码,执行频率非常高,则输出日志建议增加判断,尤其是低级别的输出<debug、info、warn>。
debug日志太多后可能会影响性能,有一种改进方法是:
If(Logger.isDebugEnabled){
Logger.debug(“something”,object);
}
- 打印日志小结
- 日志打印
- 日志打印
- 日志打印
- 日志打印
- 打印日志
- 日志打印
- 日志打印
- 日志打印
- 打印日志
- 日志打印
- 打印日志
- 日志打印
- 日志打印
- 网页打印小结
- .net 打印 小结
- adb shell 打印小结
- adb shell 打印小结
- 新建线程的异常处理
- UNIX环境高级编程-读书笔记-网络编程(一)
- Codeforces Gym 101142 F. Folding
- Mapped Statements collection does not contain value for
- 阿里云centos7 部署java+tomcat+mysql运行环境
- 打印日志小结
- UNIX环境高级编程-读书笔记-网络编程(二)
- CButton重绘图片实现自由缩放和拖动
- 定制Eclipse右键new菜单
- kaldi下清华语音数据集的说话人测试脚本编写
- shell命令
- UNIX环境高级编程-读书笔记-网络编程(三)
- 【DL笔记】LeNet5神经网络简介及TensorFlow实现
- 预告/计划