分类 Java 下的文章

log4j 2过滤spring日志遇到的问题

在项目中使用testng写单元测试,使用log4j输出日志,spring的日志也被打印出来,在调试的时候看到一片一片的spring日志很烦,总是要找自己的输出日志。
QQ截图20180320203129.jpg
这样式的~~~

找了一下log4j2的日志过滤,很简单,在logger定义名字的时候指定包名即可。

    <logger name="com.wangc" level="debug">
        <AppenderRef ref="Console" />
        <AppenderRef ref="test_log"/>
    </logger>
    <Root level="info">
        <AppenderRef ref="Console" />
    </Root>

com.wangc 包里的类使用debug级别,方便调试,并同时输出到文件和控制台。

使用Root 的info级别,控制其他第三方包的日志。

或者使用:

    <logger name="org.springframework" level="INFO"></logger>
    <Root level="debug">
        <AppenderRef ref="Console" />
    </Root>

ROOT使用debug级别,并指定org.springframework 使用info级别。

很简单,但是!!!在这个项目中并没有起作用,以为是log4j2的配置问题,反反复复的查找问题。

后来发现乌鸦在log4j2中定义的日志模板为

<PatternLayout pattern="[%-5p] %d %c - %m%n"/>

与上面spring输出的日志不一样,看来spring并没有使用乌鸦定义的log4j2配置。

仔细看了一下小伙伴创建的项目,使用的是spring-boot,默认使用了logback。在pom文件排除该包的依赖。

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

搞定!!!

PS:多此一举,spring-boot集成的logback是一个更优秀的日志框架!!!去TM的log4j吐~~~

参考:http://blog.didispace.com/springbootlog4j/

使用static SimpleDateFormat引发的同步问题

测试一个接口,发送的报文仅id不同,其他的值都是相同的,但是接口返回的是“日期格式错误”。经核实,接口中校验日期格式的方法用的是SimpleDateFormat的parse()方法。
查看jdk api:

日期格式是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。

下面为事件还原代码:

- 阅读剩余部分 -

tomcat启动报错This file is needed to run this program

背景:服务器是别人的,估计是用过安装版的tomcat,后来把目录删除了。
我把压缩版的tomcat放到服务器上,启动时./startup.sh ,报错

Cannot find /usr/tomcat/apache-tomcat-9.0.0.M3/bin/setclasspath.sh
This file is needed to run this program

找了一下,这个报错信息是catalina.sh中164行的报错,试着打印了$CATALINA_HOME,果然是/usr/tomcat/apache-tomcat-9.0.0.M3,这个估计是就是原来安装版的tomcat目录。

- 阅读剩余部分 -

java操作cookie

同一域名下的子域名的cookie可以互相访问。
在设置cookie的时候,有以下几个方法:
setDomain() 设置cookie的有效domain范围,可以指定当前的domain,也可以指定domain的父级domain(当前domain为二级域名的时候,可以指定有效范围有一级domain)
setPath() 设置cookie的有效路径范围,可以指定根路径(/),说明所有的path都有效;或者指定某一个path(/test),则/test及下级路径都有效
setMaxAge() 设置cookie的最大值,未验证。

- 阅读剩余部分 -