由于项目要用的日志方面的东西,之前使用log4j一直无法输出log,可能是由于jar包中含有其他配置信息,导致我的配置文件无法生效,这次索性使用log4j2去生成日志.
配置按照网上的来:
1、pom.xml中去除spring-boot-starter-web中的spring-boot-starter-logging,手动加上spring-boot-starter-log4j2依赖,加入阿里云日志依赖
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--阿里云日志服务 开始-->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>aliyun-log-log4j2-appender</artifactId>
<version>0.1.10</version>
</dependency>
<!--阿里云日志服务 结束-->
2、log4j2.xml中填入相关日志信息
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<!-- 设置日志输出的格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Filters>
<ThresholdFilter level="INFO"/>
</Filters>
</Console>
<RollingFile name="RollingFileInfo" fileName="F:/log/myLog.txt"
filePattern="D:/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<Filters>
<ThresholdFilter level="INFO"/>
</Filters>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<Loghub name="Loghub"
projectName="your project name"
logstore="your logstore"
endpoint="cn-shanghai.log.aliyuncs.com" //注意!这个在阿里云控制后台右上角“查看Endpoint”可以去获取到,我这个是华东2(上海)的
accessKeyId="********"
accessKey="*************************"
packageTimeoutInMS="3000"
logsCountPerPackage="4096"
logsBytesPerPackage="3145728"
memPoolSizeInByte="104857600"
retryTimes="3"
maxIOThreadSizeInPool="8"
topic="topic1"
source="source1"
timeFormat="yyyy-MM-dd'T'HH:mm:ssZ"
timeZone="UTC"
ignoreExceptions="true">
<PatternLayout pattern="%d %-5level [%thread] %logger{0}: %msg"/>
<Filters>
<ThresholdFilter level="INFO" />
</Filters>
</Loghub>
</appenders>
<loggers>
<root level="all">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
<Appender-Ref ref="Loghub"/>
</root>
</loggers>
</Configuration>
3、application.properties指定log文件
logging.config=classpath:log4j2.xml
但是,这么一顿骚操作完成后,启动项目的时候却报错了!报的是空指针异常!
Caused by: java.lang.NullPointerException
at org.apache.commons.logging.LogAdapter$Log4jLog.<init>(LogAdapter.java:140)
at org.apache.commons.logging.LogAdapter$Log4jAdapter.createLog(LogAdapter.java:102)
at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:79)
at org.apache.commons.logging.LogFactoryService.getInstance(LogFactoryService.java:46)
at org.apache.commons.logging.LogFactoryService.getInstance(LogFactoryService.java:41)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
at org.apache.http.conn.ssl.AbstractVerifier.<init>(AbstractVerifier.java:61)
at org.apache.http.conn.ssl.AllowAllHostnameVerifier.<init>(AllowAllHostnameVerifier.java:44)
at org.apache.http.conn.ssl.AllowAllHostnameVerifier.<clinit>(AllowAllHostnameVerifier.java:46)
... 73 more
这个就很头疼了,查遍了整个百度,没有找到同样的问题,别提有多绝望了,然后发工单呗,工单说有包冲突导致的问题,结果找了一个晚上的包冲突都无济于事。
最后才发现是jcl的空实现导致的空指针,加上
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
然后Maven同步一下,重启一下项目就好了。