【实战】SpringBoot2.1.0+log4j2整合阿里云日志系统报错解决办法

8 篇文章 0 订阅
8 篇文章 0 订阅

由于项目要用的日志方面的东西,之前使用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同步一下,重启一下项目就好了。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值