slf4j

来看看阿里架构师Java 代码打日志姿势!你也是这样写的吗

我只是一个虾纸丫 提交于 2020-08-12 18:36:15
使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程 基本格式 必须使用参数化信息的方式: logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol); 对于debug日志,必须判断是否为debug级别后,才进行使用: if (logger.isDebugEnabled()) { logger.debug("Processing trade with id: " +id + " symbol: " + symbol); } 不要进行字符串拼接,那样会产生很多String对象,占用空间,影响性能。 反例(不要这么做): logger.debug("Processing trade with id: " + id + " symbol: " + symbol); 使用[]进行参数变量隔离

Java常用开源库

℡╲_俬逩灬. 提交于 2020-08-12 13:34:32
Java的经久不衰,很大程度上得益于Java的生态好。在日常开发中,我们也会经常使用到各种开源库和工具类,为了避免重复造轮子,本文将贴出工作及学习中会用到的部分开源库和工具类。Java的生态实在太大,这里只能列举一部分。如果你对此感兴趣,不妨去读读他们的源码。 v HTML解析器jsoup 1.1 介绍 jsoup( GitHub地址 、 中文文档 )是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 1.2 示例 Document document = Jsoup.connect("https://www.cnblogs.com/toutou/" ) .userAgent( "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" ) .get(); // System.out.println(document); Elements elements = document.select("div.box.item" ); for (Element element : elements) {

20200725_0.0.1_项目创建及log4j配置

坚强是说给别人听的谎言 提交于 2020-08-12 11:46:47
0. 摘要   0.1 添加log4j依赖 < dependency > < groupId > org.slf4j </ groupId > < artifactId > slf4j-log4j12 </ artifactId > < version > 1.7.25 </ version > </ dependency >   0.2 添加 log4j.properties 配置文件 log4j.rootLogger=ERROR, m log4j.appender.m=org.apache.log4j.ConsoleAppender log4j.appender.m.layout=org.apache.log4j.PatternLayout log4j.appender.m.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 1. 操作步骤   1.1 创建项目     1.1.1 file ==> New ==> Project      1.1.2 maven ==> next     1.1.3 坐标配置     1.1.4 项目名、路径设置    1.2 配置log4j日志记录     1.2.1 添加依赖 < dependencies > < dependency > <

Spring Cloud Alibaba 整合gateway

北慕城南 提交于 2020-08-12 06:53:09
pom配置 <dependencies> <!--gateway--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!--Spring Cloud Alibaba--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency>

redisTemplate #分布式锁# 设置过期时间

喜夏-厌秋 提交于 2020-08-12 03:10:41
<!--导入依赖--> <dependency> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-starter-data-redis </artifactId> </dependency> @Service @Slf4j public class RedisService { @Resource ( name = "stringRedisTemplate" ) ValueOperations<String , String> valOpsStr ; /** * 获取一个redis分布锁 * * @param lockKey 锁住的key * @param lockExpireMils 锁住的时长。如果超时未解锁,视为加锁线程死亡,其他线程可夺取锁 * @return */ public boolean getLock (String lockKey , long lockExpireMils) { return (Boolean) redisTemplate .execute((RedisCallback) connection -> { long nowTime = System. currentTimeMillis () ; Boolean acquire = connection

Java常用开源库

大憨熊 提交于 2020-08-12 00:42:19
Java的经久不衰,很大程度上得益于Java的生态好。在日常开发中,我们也会经常使用到各种开源库和工具类,为了避免重复造轮子,本文将贴出工作及学习中会用到的部分开源库和工具类。Java的生态实在太大,这里只能列举一部分。如果你对此感兴趣,不妨去读读他们的源码。 v HTML解析器jsoup 1.1 介绍 jsoup( GitHub地址 、 中文文档 )是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 1.2 示例 Document document = Jsoup.connect("https://www.cnblogs.com/toutou/" ) .userAgent( "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" ) .get(); // System.out.println(document); Elements elements = document.select("div.box.item" ); for (Element element : elements) {

处理xss攻击

夙愿已清 提交于 2020-08-11 23:30:01
前端处理方法: function checkXSS(param){ var pattern = /<[^>]+>|alert(.*)/; var str = “”; $("[id=’"+ param +"’]").each(function () { str += $(this).val(); }); if (pattern.test(str)){ $.umapMessager.alert([[#{common.hint}]], [[#{config.cvalue.validate}]]); return true; } } 后端加过滤器的例子: @PropertySource(value = {“classpath:security.properties”}) @ConfigurationProperties(prefix = “security”) @Component @Data public class SecurityParam { private String antiparam; private String whiteparam; } security.properties: #antiparam xcc/css security.antiparam=<,>,%3c,set-cookie,src="javascript:,ProcessBuilder,alert(

SLF4J默认配置文件示例

痴心易碎 提交于 2020-08-11 17:27:27
logback.xml默认配置 <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <Target>System.out</Target> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <appender name="fileLog" class="ch.qos.logback.core.FileAppender"> <file>c:/temp/test.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="stdout

别在 Java 代码里乱打日志了,这才是正确的打日志姿势!

ⅰ亾dé卋堺 提交于 2020-08-11 13:57:31
使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程 基本格式 必须使用参数化信息的方式: logger.debug( "Processing trade with id:[{}] and symbol : [{}] " , id, symbol); 复制代码 对于debug日志,必须判断是否为debug级别后,才进行使用: if (logger.isDebugEnabled()) { logger.debug( "Processing trade with id: " +id + " symbol: " + symbol); } 复制代码 不要进行字符串拼接,那样会产生很多String对象,占用空间,影响性能。 反例(不要这么做): logger.debug( "Processing trade with id: " + id + " symbol: " + symbol);

java利用Freemarker模板生成docx格式的word文档(全过程)

最后都变了- 提交于 2020-08-11 12:47:38
参考: https://my.oschina.net/u/3737136/blog/2958421?tdsourcetag=s_pcqq_aiomsg 具体思路 1.创建一个docx文档模板,其中的英文是根据自己需要填充的内容。 2.把docx文档修改为ZIP格式(修改.docx后缀名为.zip),然后把zip解压到当前目录 3.修改word目录下document.xml文档,把如下原来是time改为${time},改好后放入项目中,用于后边内容填充。【有时候一个单词可能会被拆分,自己要做相应的调整】 <#list minuteList as minute></#list> 可用于循环填充,相当于 for (Minute minte:minuteList),示列如下: < #list minuteList as minute > < w:p w14:paraId ="3BB7AF6B" w14:textId ="2AD2E958" w:rsidR ="00D80192" w:rsidRDefault ="00C4552D" w:rsidP ="00E47882" > < w:pPr > < w:pStyle w:val ="a6" /> < w:numPr > < w:ilvl w:val ="0" /> < w:numId w:val ="2" /> </ w:numPr > <