java中错误日志的用法
1.maven包:将下面的maven加入到pom.xml
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.将log4j.properties放到src/main/java下面:
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E:/logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/logs/log.log
log4j.appender.D.Append = true
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
### 输出ERROR 级别以上的日志到=E:/logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D:/logs/error.log
log4j.appender.E.Append = true
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
3.以前,项目中每个类中需要打印日志时,就得在类中声明一个Logger对象,总觉得,这么做有点多余,终于,找到一种解决方法,打印日志方法跟Logger用法完全一样。直接分享代码:
package com.sdd.Deep.sql;
import org.apache.log4j.Logger;
/**
* log4j日志工具类,方便直接输出日志信息,不用每个类都声明logger日志对象
*
* @author Administrator
*
*/
public class Log4jKit {
/**
* 获取最原始被调用的堆栈信息
* @return
*/
private static StackTraceElement findCaller() {
// 获取堆栈信息
StackTraceElement[] callStack = Thread.currentThread().getStackTrace();
if(null == callStack){
return null;
}
// 最原始被调用的堆栈信息
StackTraceElement caller = null;
// 日志类名称
String logClassName = Log4jKit.class.getName();
// 循环遍历到日志类标识
boolean isEachLogClass = false;
// 遍历堆栈信息,获取出最原始被调用的方法信息
for (StackTraceElement strackTraceEle : callStack) {
// 遍历到日志类
if(logClassName.equals(strackTraceEle.getClassName())) {
isEachLogClass = true;
}
// 下一个非日志类的堆栈,就是最原始被调用的方法
if(isEachLogClass) {
if(!logClassName.equals(strackTraceEle.getClassName())) {
isEachLogClass = false;
caller = strackTraceEle;
break;
}
}
}
return caller;
}
/**
* 自动匹配请求类名,生成logger对象,此处 logger name 值为 [className].[methodName]() Line: [fileLine]
* @return
* @author yzChen
* @date 2016年10月13日 下午11:50:59
*/
private static Logger logger() {
StackTraceElement caller = findCaller();//最原始被调用的堆栈对象
if(caller == null){
return Logger.getLogger(Log4jKit.class);
}else{
return Logger.getLogger(caller.getClassName() + "." + caller.getMethodName() + "() Line: " + caller.getLineNumber());
}
}
public static void trace(String msg) {
trace(msg, null);
}
public static void trace(String msg, Throwable e) {
logger().trace(msg, e);
}
public static void debug(String msg) {
debug(msg, null);
}
public static void debug(String msg, Throwable e) {
logger().debug(msg, e);
}
public static void info(String msg) {
info(msg, null);
}
public static void info(String msg, Throwable e) {
logger().info(msg, e);
}
public static void warn(String msg) {
warn(msg, null);
}
public static void warn(String msg, Throwable e) {
logger().warn(msg, e);
}
public static void error(String msg) {
error(msg, null);
}
public static void error(String msg, Throwable e) {
logger().error(msg, e);
}
}
4.测试方法:
package com.sdd.Deep.sql;
import org.apache.log4j.Logger;
public class Testlogger {
// private static final Logger LOG = Logger.getLogger(Testlogger.class);
//private static final Logger LOG = Logger.getLogger("haha");
public static void main(String[] args){
Log4jKit.info("haha");
// LOG.info("this is log");
// LOG.error("我是日志");
}
}
java中错误日志的用法的更多相关文章
- java中的日志打印
java中的日志打印: 日志工具类: #获取日志 INFO:表示获取日志的等级 A1:表示日志存器,可以自定义名称 #===DEBUG INFO log4j.rootLogger=DEBUG,A1,A ...
- java中class,public的用法
java中class,public的用法 一.Java访问权限饰词(access specifiers) Java有public.protect.friendly.private四种访问权限,并且这四 ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- Java中Date各种相关用法
Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set ...
- JAVA中enum的常见用法
JAVA中enum的常见用法包括:定义并添加方法.switch.遍历.EnumSet.EnumMap 1.定义enum并添加或覆盖方法 public Interface Behaviour{ void ...
- 巨人大哥谈Java中的Synchronized关键字用法
巨人大哥谈Java中的Synchronized关键字用法 认识synchronized 对于写多线程程序的人来说,经常碰到的就是并发问题,对于容易出现并发问题的地方价格synchronized基本上就 ...
- Java中Class类及用法
Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方 ...
- JAVA中mark()和reset()用法
根据JAVA官方文档的描述,mark(int readlimit)方法表示,标记当前位置,并保证在mark以后最多可以读取readlimit字节数据,mark标记仍有效.如果在mark后读取超过rea ...
- Java中this、super用法
这节我们主要是区分this 和 super这两个关键字的用法 起初我根本弄不清楚this 和 super这两个关键字的用法,也不明白在代码实例中为什么既用this又用super,下面就是原因: 1. ...
随机推荐
- 使用 cURL 度量 Web 站点的响应时间
curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://www.canada.com 0. ...
- mysql的水平拆分和垂直拆分
转:http://www.cnblogs.com/sns007/p/5790838.html 1,水平分割: 例:QQ的登录表.假设QQ的用户有100亿,如果只有一张表,每个用户登录的时候数据库都要从 ...
- kafka学习
kafka名词解释和工作方式: Producer :消息生产者,就是向kafka broker发消息的客户端. Consumer :消息消费者,向kafka broker取消息的客户端 Topic : ...
- springMVC中@RequestParam和@RequestBody注解的用法
springMVC中@RequestParam注解用在Controller层获解析.提取参数,当然你也可以用request.getParameter("name")来获取参数,而@ ...
- springMVC中使用POI方式导出excel至客户端、服务器实例
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 这里的方法支持导出excel至项目所在服务器,或导 ...
- VisionPro学习笔记:用IEEE1394相机抓取图像
1)找到采集卡: CogFrameGrabber1394DCAMs cameras = new CogFrameGrabber1394DCAMs(); 2)列举相连接的相机: ICogFrameGra ...
- zabbix-proxy搭建
环境: 因为公司需要监控远程客户机,但server端无法主动连接agent端,客户端可以连接公司ip 公司有固定ip,可以开放某个端口给zabbixserver,客户机agent端可以主动通过外网连接 ...
- IOS 疯狂基础之 页面间跳转
常用的就两种 一种通过导航,一种直接跳 第一种 直接跳转 思路大致就是new一个目的页面,然后设置下页面跳转动画 中间还可以做点目的页面的数据初始化: ValueInputView *valueVie ...
- unity getcomponentsinchildren 翻船
今天使用GetComponentsInChildren, 老司机翻船.因为一直以来我使用这个函数,下意识的从来所有的相同component都是放在子节点下,本身节点肯定不会放一个相同的componen ...
- Spring MVC NoClassDefFoundError 问题的解决方法。
这种情况在有些项目中出现过,但是不是所有项目都会有这种问题,具体原因不详. 解决方法:如果某个pom的类出现这个异常,首先看看父级POM文件是否有这个dependency,然后再看看启动的网站web ...