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中错误日志的用法的更多相关文章

  1. java中的日志打印

    java中的日志打印: 日志工具类: #获取日志 INFO:表示获取日志的等级 A1:表示日志存器,可以自定义名称 #===DEBUG INFO log4j.rootLogger=DEBUG,A1,A ...

  2. java中class,public的用法

    java中class,public的用法 一.Java访问权限饰词(access specifiers) Java有public.protect.friendly.private四种访问权限,并且这四 ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. Java中Date各种相关用法

    Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set ...

  5. JAVA中enum的常见用法

    JAVA中enum的常见用法包括:定义并添加方法.switch.遍历.EnumSet.EnumMap 1.定义enum并添加或覆盖方法 public Interface Behaviour{ void ...

  6. 巨人大哥谈Java中的Synchronized关键字用法

    巨人大哥谈Java中的Synchronized关键字用法 认识synchronized 对于写多线程程序的人来说,经常碰到的就是并发问题,对于容易出现并发问题的地方价格synchronized基本上就 ...

  7. Java中Class类及用法

    Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方 ...

  8. JAVA中mark()和reset()用法

    根据JAVA官方文档的描述,mark(int readlimit)方法表示,标记当前位置,并保证在mark以后最多可以读取readlimit字节数据,mark标记仍有效.如果在mark后读取超过rea ...

  9. Java中this、super用法

     这节我们主要是区分this 和 super这两个关键字的用法 起初我根本弄不清楚this 和 super这两个关键字的用法,也不明白在代码实例中为什么既用this又用super,下面就是原因: 1. ...

随机推荐

  1. Python装饰器小代码

    # coding=utf-8import timedef outer(fun): def inner(): start = time.time() fun() runtime = time.time( ...

  2. maven项目使用jacoco插件检测代码覆盖率详细配置

    使用maven构建项目(java项目或者web项目都可以) jacoco插件的配置参考官方网址:http://www.eclemma.org/jacoco/trunk/doc/maven.html ( ...

  3. python 程序退出方式

    sys.exit() 执行该语句会直接退出程序,这也是经常使用的方法,也不需要考虑平台等因素的影响,一般是退出Python程序的首选方法. 该方法中包含一个参数status,默认为0,表示正常退出,也 ...

  4. web、pc、wap、app的区别

    通常情况下web=pc,wap=app,前者指电脑用的程序,后者指手机用的程序. 更深层的区别是,pc电脑上软件,web电脑上的网页,wap手机上的网页,app手机用软件

  5. Newtonsoft.Json 版本冲突时解决方案

    如果同一项目中不同第三方类库分别使用了不同版本的Newtonsoft.Json的情况下,可以在主项目配置文件中添加以下节点,将0.0.0.0-11.0.0.0此区间的Newtonsoft.Json使用 ...

  6. MyEclipse中设置注释模板的方法

    1.选择菜单Window→Preferences. 2.选择Java→Code style→Code Templates→Commets.选中具体的分类如Methods,点击右侧的Edit可以设置对应 ...

  7. 完美解决打开github速度慢的问题

    摘抄自知乎. 修改hosts(HOSTS文件路径:C:\Windows\System32\drivers\etc\hosts) 1.打开Dns检测|Dns查询 - 站长工具 2.在检测输入栏中输入ht ...

  8. MySQL权限详解

    MySQL权限级别介绍 MySQL权限级别 全局性的管理权限,作用于整个MySQL实例级别 数据库级别的权限,作用于某个指定的数据库上或者所有的数据库上 数据库对象级别的权限,作用于指定的数据库对象上 ...

  9. Linux系统中常用操作命令

    常用指令 ls        显示文件或目录     -l          列出文件详细信息l(list)     -a         列出当前目录下所有文件及目录,包括隐藏的a(all)mkdi ...

  10. oralce plsql案例练习

    以下plsql程序用的scott用户的dept,emp表. 案例1 --查询80,81,82,87年员工入职人数 set serveroutput on declare cursor cemp is ...