对log4j日志类进行了简单封装,使用该封装类的优势在于以下两点:

  1、不必在每个类中去创建对象,直接类名 + 方法即可

  2、可以很方便的打印出堆栈信息

  

package com.tradeplatform.receiveorder.util;

import java.io.PrintWriter;
import java.io.StringWriter; import org.apache.log4j.Logger; /**
* @Description 日志记录类
* @author panteng
* @version V0.0.1
* @date 2016-09-08
*/
public class SysLog {
public static Logger log = Logger.getLogger(SysLog.class); /**
* 打印警告
*
* @param obj
*/
public static void warn(Object obj) {
try{
/*** 获取输出信息的代码的位置 ***/
String location = "";
StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
location = stacks[2].getClassName() + "." + stacks[2].getMethodName()
+ "(" + stacks[2].getLineNumber() + ")";
/*** 是否是异常 ***/
if (obj instanceof Exception) {
Exception e = (Exception) obj;
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw, true));
String str = sw.toString();
log.warn(location + str);
} else {
log.warn(location + obj.toString());
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 打印信息
*
* @param obj
*/
public static void info(Object obj) {
try{
/*** 获取输出信息的代码的位置 ***/
String location = "";
StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
location = stacks[2].getClassName() + "." + stacks[2].getMethodName()
+ "(" + stacks[2].getLineNumber() + ")";
/*** 是否是异常 ***/
if (obj instanceof Exception) {
Exception e = (Exception) obj;
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw, true));
String str = sw.toString();
log.info(location + str);
} else {
log.info(location + obj.toString());
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 打印错误
*
* @param obj
*/
public static void error(Object obj) {
try{
/*** 获取输出信息的代码的位置 ***/
String location = "";
StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
location = stacks[2].getClassName() + "." + stacks[2].getMethodName()
+ "(" + stacks[2].getLineNumber() + ")"; /*** 是否是异常 ***/
if (obj instanceof Exception) {
Exception e = (Exception) obj;
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw, true));
String str = sw.toString();
log.error(location + str);
} else {
log.error(location + obj.toString());
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 向数据库告警表中插入信息
* @param obj
*/
public static void dbWarn(Object obj) {
try{
String printInfo = "";
/*** 获取输出信息的代码的位置 ***/
String location = "";
StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
location = stacks[2].getClassName() + "." + stacks[2].getMethodName()
+ "(" + stacks[2].getLineNumber() + ")"; /*** 是否是异常 ***/
if (obj instanceof Exception) {
Exception e = (Exception) obj;
printInfo = location + e.getMessage();
log.fatal(printInfo.substring(0, printInfo.length() > 512?512:printInfo.length()));
} else {
printInfo = location + obj.toString();
log.fatal(printInfo.substring(0, printInfo.length() > 512?512:printInfo.length()));
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 获取调用此函数的代码的位置
* @return 包名.类名.方法名(行数)
*/
public static String getCodeLocation(){
try{
/*** 获取输出信息的代码的位置 ***/
String location = "";
StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
location = stacks[2].getClassName() + "." + stacks[2].getMethodName()
+ "(" + stacks[2].getLineNumber() + ")";
return location;
}catch (Exception e) {
// TODO: handle exception
SysLog.error(e);
return "";
}
}
}

  配置文件:

  

base.logs.dir=D:/testMycatLog

log4j.rootLogger = DEBUG, INFO, all_log, stdout ,DB

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 SSS} %-5p [%-15x] [%t] - %m%n log4j.appender.all_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.all_log.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.all_log.File=${base.logs.dir}/all_log.log
log4j.appender.all_log.layout=org.apache.log4j.PatternLayout
log4j.appender.all_log.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss SSS} %-5p [%-15x] [%t] - %m%n log4j.appender.DB = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DB.BufferSize=1
log4j.appender.DB.driver=com.mysql.jdbc.Driver
log4j.appender.DB.URL=jdbc:mysql://192.168.91.231:8066/CTPDB
log4j.appender.DB.user=ctp
log4j.appender.DB.password=ctp
log4j.appender.DB.Threshold =FATAL
log4j.appender.DB.layout = org.apache.log4j.PatternLayout
log4j.appender.DB.sql=insert into syswarn(WARN_LEVEL,WARN_INFO) values("1",'%m'); #--------------kafka配置----------------#
log4j.appender.kafkaAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.kafkaAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.kafkaAppender.File=${base.logs.dir}/server.log
log4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.kafkaAppender.layout.ConversionPattern=[%d] %p %m (%c)%n log4j.appender.stateChangeAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stateChangeAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.stateChangeAppender.File=${base.logs.dir}/state-change.log
log4j.appender.stateChangeAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.stateChangeAppender.layout.ConversionPattern=[%d] %p %m (%c)%n log4j.appender.requestAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.requestAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.requestAppender.File=${base.logs.dir}/kafka-request.log
log4j.appender.requestAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.requestAppender.layout.ConversionPattern=[%d] %p %m (%c)%n log4j.appender.cleanerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.cleanerAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.cleanerAppender.File=${base.logs.dir}/log-cleaner.log
log4j.appender.cleanerAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.cleanerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n log4j.appender.controllerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.controllerAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.controllerAppender.File=${base.logs.dir}/controller.log
log4j.appender.controllerAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.controllerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n # Turn on all our debugging info
#log4j.logger.kafka.producer.async.DefaultEventHandler=DEBUG, kafkaAppender
#log4j.logger.kafka.client.ClientUtils=DEBUG, kafkaAppender
#log4j.logger.kafka.perf=DEBUG, kafkaAppender
#log4j.logger.kafka.perf.ProducerPerformance$ProducerThread=DEBUG, kafkaAppender
#log4j.logger.org.I0Itec.zkclient.ZkClient=DEBUG
log4j.logger.kafka=INFO, kafkaAppender log4j.logger.kafka.network.RequestChannel$=WARN, requestAppender
log4j.additivity.kafka.network.RequestChannel$=false #log4j.logger.kafka.network.Processor=TRACE, requestAppender
#log4j.logger.kafka.server.KafkaApis=TRACE, requestAppender
#log4j.additivity.kafka.server.KafkaApis=false
log4j.logger.kafka.request.logger=WARN, requestAppender
log4j.additivity.kafka.request.logger=false log4j.logger.kafka.controller=TRACE, controllerAppender
log4j.additivity.kafka.controller=false log4j.logger.kafka.log.LogCleaner=INFO, cleanerAppender
log4j.additivity.kafka.log.LogCleaner=false
log4j.logger.kafka.log.Cleaner=INFO, cleanerAppender
log4j.additivity.kafka.log.Cleaner=false log4j.logger.state.change.logger=TRACE, stateChangeAppender
log4j.additivity.state.change.logger=false
#---------------------------------------#

  

Java 基于log4j的日志工具类的更多相关文章

  1. Android开发调试日志工具类[支持保存到SD卡]

    直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...

  2. java导出数据EXCEL的工具类(以spring-webmvc-4.0.4jar为基础)

    1.本工具类继承于  spring-webmvc-4.0.4jar文件心中的一个类   AbstractExcelView 2.代码如下 package com.skjd.util; import j ...

  3. Log 日志工具类 保存到文件 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. 基于终端的日志工具logview

    概述 logview是一个Shell脚本编写的基于终端的日志工具, 具有终端通知, email通知, 错误信息颜色配置, 以及灵活强大的监控配置. 还可以灵活的配置脚本监控的时间, 以及错误发生时需要 ...

  5. Java加载Properties配置文件工具类

    Java加载Properties配置文件工具类 import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; ...

  6. Android utils 之 日志工具类

    工具类 在开发的过程中,我们时常会对代码执行特定的处理,而这部分处理在代码中可能多次用到,为了代码的统一性.规范性等,通过建工具类的方式统一处理.接下来我会罗列各种工具类. 日志工具类 在utils文 ...

  7. java中的Arrays这个工具类你真的会用吗

    Java源码系列三-工具类Arrays ​ 今天分享java的源码的第三弹,Arrays这个工具类的源码.因为近期在复习数据结构,了解到Arrays里面的排序算法和二分查找等的实现,收益匪浅,决定研读 ...

  8. Java操作文件夹的工具类

    Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...

  9. Java汉字转成汉语拼音工具类

    Java汉字转成汉语拼音工具类,需要用到pinyin4j.jar包. import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...

随机推荐

  1. CentOS 7将Python 2.X.X升级到Python 3.X.X

    # cd /usr/local/src/ # ls Python-.tgz # .tgz # ls Python- Python-.tgz # cd Python-/ # yum install gc ...

  2. hdu 3480 Division(斜率优化DP)

    题目链接:hdu 3480 Division 题意: 给你一个有n个数的集合S,现在让你选出m个子集合,使这m个子集合并起来为S,并且每个集合的(max-min)2 之和要最小. 题解: 运用贪心的思 ...

  3. [SOJ]统计数字

    Description 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小 ...

  4. 原生JavaScript+CSS3实现移动端滑块效果

    在做web页面时,无论PC端还是移动端,我们会遇到滑块这样的效果,可能我们往往会想着去网上找插件,其实这个效果非常的简单,插件代码的的代码往往过于臃肿,不如自己动手,自给自足.首先看一下效果图: 分析 ...

  5. 向量相加CUDA练习

    #include<string.h> #include<math.h> #include<stdlib.h> #include<stdio.h> #de ...

  6. 取消a标签在移动端点击时的背景颜色

    一.取消a标签在移动端点击时的蓝色 -webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-user-select: none; -m ...

  7. java栈内存堆内存和GC相关

    java栈内存堆内存 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存,有着不同的作用.栈内存用来存储局部变量和方法调用.栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属 ...

  8. mysql添加远程用户

    -- 增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询.插入.修改.删除的权限. -- 首先用以root用户连入MYSQL,然后键入以下命令: grant selec ...

  9. response.setContentType与 request.setCharacterEncoding 区别

    1.request.setCharacterEncoding()是设置从request中取得的值或从数据库中取出的值的编码 2.response.setContentType指定 HTTP 响应的编码 ...

  10. vs2010帮助文档下载以及帮助查看器(H3Viewer)的使用

    在工作中遇到想查看vs2010的帮助文档.推荐使用H3Viewer.一个第三方的免费软件,独立于VS2010运行的帮助查看器.这方面的资料并不多.把本次自己使用的心得分享给大家. H3Viewer官方 ...