標籤:word 函數 dna 位置 async end 堆棧 topic layout
對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:/testMycatLoglog4j.rootLogger = DEBUG, INFO, all_log, stdout ,DBlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss SSS} %-5p [%-15x] [%t] - %m%nlog4j.appender.all_log=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.all_log.DatePattern=‘.‘yyyy-MM-dd-HHlog4j.appender.all_log.File=${base.logs.dir}/all_log.loglog4j.appender.all_log.layout=org.apache.log4j.PatternLayoutlog4j.appender.all_log.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss SSS} %-5p [%-15x] [%t] - %m%nlog4j.appender.DB = org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.DB.BufferSize=1log4j.appender.DB.driver=com.mysql.jdbc.Driverlog4j.appender.DB.URL=jdbc:mysql://192.168.91.231:8066/CTPDBlog4j.appender.DB.user=ctplog4j.appender.DB.password=ctplog4j.appender.DB.Threshold =FATALlog4j.appender.DB.layout = org.apache.log4j.PatternLayoutlog4j.appender.DB.sql=insert into syswarn(WARN_LEVEL,WARN_INFO) values("1",‘%m‘);#--------------kafka配置----------------#log4j.appender.kafkaAppender=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.kafkaAppender.DatePattern=‘.‘yyyy-MM-dd-HHlog4j.appender.kafkaAppender.File=${base.logs.dir}/server.loglog4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayoutlog4j.appender.kafkaAppender.layout.ConversionPattern=[%d] %p %m (%c)%nlog4j.appender.stateChangeAppender=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.stateChangeAppender.DatePattern=‘.‘yyyy-MM-dd-HHlog4j.appender.stateChangeAppender.File=${base.logs.dir}/state-change.loglog4j.appender.stateChangeAppender.layout=org.apache.log4j.PatternLayoutlog4j.appender.stateChangeAppender.layout.ConversionPattern=[%d] %p %m (%c)%nlog4j.appender.requestAppender=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.requestAppender.DatePattern=‘.‘yyyy-MM-dd-HHlog4j.appender.requestAppender.File=${base.logs.dir}/kafka-request.loglog4j.appender.requestAppender.layout=org.apache.log4j.PatternLayoutlog4j.appender.requestAppender.layout.ConversionPattern=[%d] %p %m (%c)%nlog4j.appender.cleanerAppender=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.cleanerAppender.DatePattern=‘.‘yyyy-MM-dd-HHlog4j.appender.cleanerAppender.File=${base.logs.dir}/log-cleaner.loglog4j.appender.cleanerAppender.layout=org.apache.log4j.PatternLayoutlog4j.appender.cleanerAppender.layout.ConversionPattern=[%d] %p %m (%c)%nlog4j.appender.controllerAppender=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.controllerAppender.DatePattern=‘.‘yyyy-MM-dd-HHlog4j.appender.controllerAppender.File=${base.logs.dir}/controller.loglog4j.appender.controllerAppender.layout=org.apache.log4j.PatternLayoutlog4j.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=DEBUGlog4j.logger.kafka=INFO, kafkaAppenderlog4j.logger.kafka.network.RequestChannel$=WARN, requestAppenderlog4j.additivity.kafka.network.RequestChannel$=false#log4j.logger.kafka.network.Processor=TRACE, requestAppender#log4j.logger.kafka.server.KafkaApis=TRACE, requestAppender#log4j.additivity.kafka.server.KafkaApis=falselog4j.logger.kafka.request.logger=WARN, requestAppenderlog4j.additivity.kafka.request.logger=falselog4j.logger.kafka.controller=TRACE, controllerAppenderlog4j.additivity.kafka.controller=falselog4j.logger.kafka.log.LogCleaner=INFO, cleanerAppenderlog4j.additivity.kafka.log.LogCleaner=falselog4j.logger.kafka.log.Cleaner=INFO, cleanerAppenderlog4j.additivity.kafka.log.Cleaner=falselog4j.logger.state.change.logger=TRACE, stateChangeAppenderlog4j.additivity.state.change.logger=false#---------------------------------------#
Java 基於log4j的日誌工具類