Java 基于log4j的日志工具类
对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的日志工具类的更多相关文章
- Android开发调试日志工具类[支持保存到SD卡]
直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...
- java导出数据EXCEL的工具类(以spring-webmvc-4.0.4jar为基础)
1.本工具类继承于 spring-webmvc-4.0.4jar文件心中的一个类 AbstractExcelView 2.代码如下 package com.skjd.util; import j ...
- Log 日志工具类 保存到文件 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 基于终端的日志工具logview
概述 logview是一个Shell脚本编写的基于终端的日志工具, 具有终端通知, email通知, 错误信息颜色配置, 以及灵活强大的监控配置. 还可以灵活的配置脚本监控的时间, 以及错误发生时需要 ...
- Java加载Properties配置文件工具类
Java加载Properties配置文件工具类 import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; ...
- Android utils 之 日志工具类
工具类 在开发的过程中,我们时常会对代码执行特定的处理,而这部分处理在代码中可能多次用到,为了代码的统一性.规范性等,通过建工具类的方式统一处理.接下来我会罗列各种工具类. 日志工具类 在utils文 ...
- java中的Arrays这个工具类你真的会用吗
Java源码系列三-工具类Arrays 今天分享java的源码的第三弹,Arrays这个工具类的源码.因为近期在复习数据结构,了解到Arrays里面的排序算法和二分查找等的实现,收益匪浅,决定研读 ...
- Java操作文件夹的工具类
Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...
- Java汉字转成汉语拼音工具类
Java汉字转成汉语拼音工具类,需要用到pinyin4j.jar包. import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...
随机推荐
- struts2查询的数据的存放
当我们查询数据的时候,把它存放到一个位置.以供页面显示. 1:使用***Map取代内置对象存放 public String query(){ ActionContext.getContext().pu ...
- javascript实现验证身份证号的有效性并提示
javascript实现验证身份证号的有效性并提示 function nunber(allowancePersonValue){ if(allowancePersonValue=="身份证号 ...
- http请求 302解决方法
http请求+302解决方法 相关文章 当前,许多站点的部署方式都对自身的性能产生了消极影响,而网站的所有者并没有意识到这个问题.我们今天针对性的讨论以下几个常见的影响网站性能的瓶颈,观察其变化趋势, ...
- web.xml Attribute "xmlns" was already specified for element "web-app"
报错信息:Attribute "xmlns" was already specified for element "web-app" 由于项目的重命名,出现了x ...
- readline与readlines不能同时使用
fd = open("C:\Users\william\Desktop\dup_file - Copy (2).txt")for i in xrange(0,len(fd.read ...
- python学习之批量更改文件格式
文件操作 import os, glob from PIL import Image path = 'D:/SBSR/view_1' imgslist = glob.glob(path+'/*.jpg ...
- 顺序表(C++实现)
类实现代码如下: ;//默认的表空间大小 template <class T> class SeqList{ protected: T *data;//存放数组 int maxSize;/ ...
- ZZNU 1163: 在线判题(指针专题)
题目描述 Ignatius is building an Online Judge, now he has worked out all the problems except the Judge S ...
- JUit——(三)JUnit核心对象(测试、测试类、Suit和Runner)
JUnit的核心对象:测试.测试类.测试集(Suite).测试运行器 1. 测试: @Test注释的.公共的.不带有任何参数.并且返回void类型的方法 2. 测试类: 公共的,包含对应类的测试方法的 ...
- 第一百一十四节,JavaScript文档对象,DOM进阶
JavaScript文档对象,DOM进阶 学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元 ...