1. import java.util.concurrent.ConcurrentMap;
  2. import java.util.concurrent.ConcurrentHashMap;
  3.  
  4. /**
  5. * Created by
  6. */
  7. public class LogWrapperFactory {
  8. private static ConcurrentMap<String, LogWrapper> concurrentMap = new ConcurrentHashMap<String, LogWrapper>();
  9.  
  10. public static LogWrapper getLogWrapper(Class clazz){
  11. //使用java8语法优化代码
  12. concurrentMap.computeIfAbsent(clazz.getName(), k->new LogWrapper(clazz));
  13. return concurrentMap.get(clazz.getName());
  14.  
  15. }
  16. }

  

  1. import java.util.*;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import com.google.common.base.Strings;
  5. import org.apache.commons.collections.CollectionUtils;
  6.  
  7. /**
  8. * Created by
  9. */
  10. public class LogWrapper {
  11.  
  12. private Logger logger;
  13. private ThreadLocal<List<Map<String, Object>>> tagThreadLocal = new ThreadLocal<List<Map<String, Object>>>();
  14.  
  15. public LogWrapper(Class clazz) {
  16. this.logger = LoggerFactory.getLogger(clazz.getName());
  17. if (null == tagThreadLocal.get()) {
  18. tagThreadLocal.set(new ArrayList<Map<String, Object>>());
  19. }
  20. }
  21.  
  22. public void clearTags() {
  23. this.tagThreadLocal.set(new ArrayList());
  24. }
  25.  
  26. public LogWrapper addTag(String tagName, Object tagValue) {
  27. List<Map<String, Object>> list = (List) tagThreadLocal.get();
  28. list = Optional.ofNullable(list).orElse(new ArrayList<Map<String, Object>>());
  29. Map<String, Object> tmap = new HashMap<String, Object>();
  30. tmap.put(tagName, tagValue);
  31. list.add(tmap);
  32. tagThreadLocal.set(list);
  33. return this;
  34. }
  35.  
  36. public LogWrapper TAG(Object tagValue) {
  37. addTag("TYPE", tagValue);
  38. return this;
  39. }
  40.  
  41. public LogWrapper KBCODE(Object tagValue) {
  42. addTag("KBCODE", tagValue);
  43. return this;
  44. }
  45.  
  46. public LogWrapper SERIALNO(Object tagValue) {
  47. addTag("SERIALNO", tagValue);
  48. return this;
  49. }
  50.  
  51. private void commonWriteLog(LogType logType, String firstParam) {
  52. StringBuilder tagsBuilder = new StringBuilder("[ThreadName=" + Thread.currentThread().getName()+"]");
  53.  
  54. List<Map<String, Object>> list = (List) tagThreadLocal.get();
  55. if (CollectionUtils.isNotEmpty(list)) {
  56. list.stream().forEach(itemMap->{itemMap.forEach((k,v)->{tagsBuilder.append("[" + Strings.nullToEmpty(k) + "=" + Strings.nullToEmpty(String.valueOf(v)) + "]");});});
  57. }
  58. switch (logType) {
  59. case INFO:
  60. logger.info(tagsBuilder.toString() + Strings.nullToEmpty(firstParam));
  61. break;
  62. case WARN:
  63. logger.warn(tagsBuilder.toString() + Strings.nullToEmpty(firstParam));
  64. break;
  65. case ERROR:
  66. logger.error(tagsBuilder.toString() + Strings.nullToEmpty(firstParam));
  67. break;
  68. default:
  69. logger.info(tagsBuilder.toString() + Strings.nullToEmpty(firstParam));
  70. }
  71. clearTags();
  72. }
  73.  
  74. private void commonWriteLog(LogType logType, String firstParam, Object... content) {
  75. StringBuilder tagsBuilder = new StringBuilder("[ThreadName=" + Thread.currentThread().getName()+"]");
  76.  
  77. List<Map<String, Object>> list = (List<Map<String, Object>>) tagThreadLocal.get();
  78. if (CollectionUtils.isNotEmpty(list)) {
  79. list.stream().forEach(itemMap->{itemMap.forEach((k,v)->{tagsBuilder.append("[" + Strings.nullToEmpty(k) + "=" + Strings.nullToEmpty(String.valueOf(v)) + "]");});});
  80. }
  81. switch (logType) {
  82. case INFO:
  83. logger.info(tagsBuilder.toString() + Strings.nullToEmpty(firstParam), content);
  84. break;
  85. case WARN:
  86. logger.warn(tagsBuilder.toString() + Strings.nullToEmpty(firstParam), content);
  87. break;
  88. case ERROR:
  89. logger.error(tagsBuilder.toString() + Strings.nullToEmpty(firstParam), content);
  90. break;
  91. default:
  92. logger.info(tagsBuilder.toString() + Strings.nullToEmpty(firstParam), content);
  93. }
  94. clearTags();
  95. }
  96.  
  97. public void info(String firstParam) {
  98. commonWriteLog(LogType.INFO, firstParam);
  99. }
  100.  
  101. public void info(String firstParam, Object... content) {
  102. commonWriteLog(LogType.INFO, firstParam, content);
  103. }
  104.  
  105. public void warn(String firstParam) {
  106. commonWriteLog(LogType.WARN, firstParam);
  107. }
  108.  
  109. public void warn(String firstParam, Object... content) {
  110. commonWriteLog(LogType.WARN, firstParam, content);
  111. }
  112.  
  113. public void error(String firstParam) {
  114. commonWriteLog(LogType.ERROR, firstParam);
  115. }
  116.  
  117. public void error(String firstParam, Object content) {
  118. commonWriteLog(LogType.ERROR, firstParam, content);
  119. }
  120.  
  121. public static void main(String[] args) throws Exception{
  122.  
  123. // new Thread(() -> {
  124. // LogWrapper log = LogWrapperFactory.getLogWrapper(LogWrapper.class);
  125. // log.addTag("abc", "abc").addTag("def", "def").info("i am {},welcome!{}", "flory", "ttt");
  126. // }).start();
  127. //
  128. // new Thread(() -> {
  129. // LogWrapper log2 = LogWrapperFactory.getLogWrapper(WarrantController.class);
  130. // log2.addTag("123", "123").addTag("456", "456").info("i am {},welcome!{}", "flory", "ttt");
  131. // }).start();
  132.  
  133. // LogWrapper log3 = LogWrapperFactory.getLogWrapper(WarrantController.class);
  134. // log3.addTag("abc", "abc").addTag("def", "def").info("i am {},welcome!{}", "flory", "ttt");
  135. }
  136.  
  137. private enum LogType {
  138. INFO(1, "info"),
  139. WARN(2, "warn"),
  140. ERROR(3, "error");
  141.  
  142. private Integer code;
  143. private String msg;
  144.  
  145. LogType(Integer code, String msg) {
  146. this.code = code;
  147. this.msg = msg;
  148. }
  149.  
  150. public Integer getCode() {
  151. return code;
  152. }
  153.  
  154. public void setCode(Integer code) {
  155. this.code = code;
  156. }
  157.  
  158. public String getMsg() {
  159. return msg;
  160. }
  161.  
  162. public void setMsg(String msg) {
  163. this.msg = msg;
  164. }
  165. }
  166. }

使用示例:

  1. import com.alibaba.fastjson.JSON;
  2. import com.google.common.base.Throwables;
  3. import com.pingan.bloan.genesis.logwrapper.LogWrapper;
  4. import com.pingan.bloan.genesis.logwrapper.LogWrapperFactory;
  5. import org.apache.http.HttpEntity;
  6. import org.apache.http.HttpResponse;
  7. import org.apache.http.NameValuePair;
  8. import org.apache.http.client.ClientProtocolException;
  9. import org.apache.http.client.config.RequestConfig;
  10. import org.apache.http.client.entity.UrlEncodedFormEntity;
  11. import org.apache.http.client.methods.HttpPost;
  12. import org.apache.http.entity.StringEntity;
  13. import org.apache.http.impl.client.CloseableHttpClient;
  14. import org.apache.http.impl.client.HttpClients;
  15. import org.apache.http.message.BasicNameValuePair;
  16. import org.apache.http.util.EntityUtils;
  17.  
  18. import java.io.IOException;
  19. import java.io.UnsupportedEncodingException;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import java.util.Map;
  23.  
  24. /**
  25. * Created by
  26. */
  27. public class HttpExecute {
  28.  
  29. private static LogWrapper loggerWrapper = LogWrapperFactory.getLogWrapper(HttpExecute.class);
  30. private static final String CONTENT_TYPE = "application/json;charset=UTF-8";
  31. private static final String UTF_8 = "UTF-8";
  32.  
  33. /**
  34. * post方法
  35. *
  36. * @param url
  37. * @param paramMap
  38. * @return
  39. */
  40. public static String executePost(String url, Map<String, Object> paramMap) {
  41. HttpResponse response = null;
  42. String sResponse = "";
  43. try {
  44. loggerWrapper.TAG("executePost").info("start visit outside resource, url:{}, prams:{}", url, JSON.toJSONString(paramMap));
  45. CloseableHttpClient httpClient = HttpClients.createDefault();
  46. HttpPost httpPost = new HttpPost(url);
  47. HttpEntity entity = new StringEntity(JSON.toJSONString(paramMap), UTF_8);
  48. httpPost.setEntity(entity);
  49.  
  50. RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(10000).setConnectTimeout(10000).build();
  51. httpPost.setConfig(requestConfig);
  52.  
  53. httpPost.addHeader("Content-Type", CONTENT_TYPE);
  54. httpPost.addHeader("Accept", CONTENT_TYPE);
  55.  
  56. loggerWrapper.TAG("HttpClientService").info("httpClient config finished, start invoking...");
  57. response = httpClient.execute(httpPost);
  58. loggerWrapper.TAG("HttpClientService").info("httpClient finished response:{}", JSON.toJSONString(response));
  59.  
  60. sResponse = EntityUtils.toString(response.getEntity());
  61. loggerWrapper.TAG("HttpClientService").info("invoke finished, response entity:{}", JSON.toJSONString(sResponse));
  62. } catch (UnsupportedEncodingException e) {
  63. loggerWrapper.TAG("executePost").error("UnsupportedEncodingException, details:{}", Throwables.getStackTraceAsString(e));
  64. } catch (ClientProtocolException e) {
  65. loggerWrapper.TAG("executePost").error("ClientProtocolException, details:{}", Throwables.getStackTraceAsString(e));
  66. } catch (IOException e) {
  67. loggerWrapper.TAG("executePost").error("IOException, details:{}", Throwables.getStackTraceAsString(e));
  68. }
  69. return sResponse;
  70. }
  71. }

  

日志自定义Tag的更多相关文章

  1. jsp如何自定义tag的标签库?

    虽然和上一次的使用自定义的tld标签简化jsp的繁琐操作的有点不同,但是目的也是一致的.自定义tag比较简单. 1.新建tag标签 在WEB-INF目录下新建一个tags的文件夹,是自定义tag标签的 ...

  2. ASP.NET Core MVC – 自定义 Tag Helpers

    ASP.NET Core Tag Helpers系列目录,共四篇: ASP.NET Core MVC Tag Helpers 介绍 ASP.NET Core MVC – Caching Tag Hel ...

  3. 自定义tag标签-实现long类型转换成Date类型

    数据库里存储的是bigint型的时间,entity实体中存放的是long类型的标签,现在想输出到jsp页面,由于使用的是jstl标签,而要显示的是可读的时间类型,找来找去有个 fmt:formatDa ...

  4. jsp中 自定义 tag的几种方式

    在jsp文件中,可以引用tag和tld文件. 1.对于tag文件,使用tagdir引用(这个直接是引用的后缀tag文件的jsp文件) <%@ taglib prefix="ui&quo ...

  5. Jsp 自定义tag标签

    1转自:https://blog.csdn.net/yusimiao/article/details/46835617 Jsp自定义tag标签 自定义tag标签的好处 程序员可以自定一些特定功能的标记 ...

  6. 自定义tag标签的方法

    JSP1.0中可以通过继承TagSupport或者BodyTagSupport来实现自定义的tag处理方法. JSP2.0中也支持另外一种更为简单的自定tag的方法,那就是直接讲JSP代码保存成*.t ...

  7. JSP自定义tag控件标签

    JSP支持自定tag的方法,那就是直接讲JSP代码保存成*.tag或者*.tagx的标签定义文件.tag和tagx文件不仅支持经典jsp代码,各种标签模版代码,还支持xml样式的jsp指令代码. 按照 ...

  8. struts2 自定义tag标签

    在项目中可能有很多相同的jsp页面表示功能,这时可以使用自定义的tag进行定义,渐少重复的工作量便于日后维护! 下面就基于struts2进行自定义标签的定义与实现: 首先:自定义类MyTag继承str ...

  9. JSP自定义tag

    前端需要调用后端的配置,想起velocity-tools.然而jsp的话,目前只能想到tag和EL表达式了. Tag相当好写,jsp2.0提供了简化写法: 编写一个java类: public clas ...

随机推荐

  1. Thinkphp上传图片

    上传图片的HTML结构: <form action="{:U('Config/addImg')}" enctype="multipart/form-data&quo ...

  2. ThinkPHP如果表名有下划线需要用Model应该怎么做?

    最近遇到一个问题,在用TP做系统的时候,我建立的表是 “tp_admin_user” 但是要用到的模型是 “AdminUserModel.model.class.php”,应该如何做? 解决方法: & ...

  3. undo文件丢失或损坏

    startup mount cp +DATA/ora11g/datafile/undotbs1.dbf alter database rename file '+DATA/ora11g/datafil ...

  4. Java中实现序列化的两种方式 Serializable 接口和 Externalizable接口

    对象的序列化就是将对象写入输出流中. 反序列化就是从输入流中将对象读取出来. 用来实现序列化的类都在java.io包中,我们常用的类或接口有: ObjectOutputStream:提供序列化对象并把 ...

  5. CentOS7使用yum安装LNMP环境以后无法打开php页面

    CentOS7使用yum安装LNMP环境以后无法打开php页面 页面提示为File not found 查看nginx错误日志/var/log/nginx/error.log提示如下 原因分析 ngi ...

  6. CH0601 Genius ACM【倍增】【归并排序】

    0601 Genius ACM 0x00「基本算法」例题 描述 给定一个整数 M,对于任意一个整数集合 S,定义“校验值”如下: 从集合 S 中取出 M 对数(即 2∗M 个数,不能重复使用集合中的数 ...

  7. 删除 oracle

    C:\app\Administrator\product\11.2.0\client_1\deinstall 用这个批处理文件,会把oracle全部删除,除这个目录本身以外 .另外它不删除服务,即使服 ...

  8. linux中gdb的可视化调试

    今天get到一个在linux下gdb调试程序的技巧和大家分享一下!平时我们利用gcc进行编程,进行程序调试时,观察程序的跳转等不是这么直观.都是入下的界面! 但是如果我们在编译连接时上加了-g命令生成 ...

  9. Linux知识总汇

    Linux相关教程 Linux的安装以及基础配置 Linux上安装Python3 Linux上安装pip以及setuptools Linux上安装MySQL Linux上安装Django Linux上 ...

  10. python拼接字符串

    python拼接字符串一般有以下几种方法: 1.直接通过(+)操作符拼接 s = 'Hello' + ' ' + 'World' + '!' print(s) 输出结果:Hello World! 使用 ...