scala编写AKKA程序使用slf4j输出log到文件踩过的坑
1.错误:Class path contains multiple SLF4J bindings
如果错误表现成如下的形式:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
直接删除slf4j-log4j12或者在maven配置文件中
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
即可
如果不是提示: slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class
而是类似:aaaaa.jar!/org/slf4j/impl/StaticLoggerBinder.class
并且aaaaa.jar包是外部引入的依赖其它项目的包,那只能重编aaaaa.jar,并去掉对slf4j-api的依赖
2. 错误:can't be loaded [akka.event.slf4j.Slf4jLogger] due to [akka.event.Logging$LoggerInitializationException: Logger log1-Slf4jLogger did
logback-classic与akka-slf4j_2.11的版本不匹配会出现此错误
开始在项目中用logback-classic 1.2.3与akka-slf4j_2.11 2.4-M3 报不能加载的错误,换成logback-classic 1.0.9与akka-slf4j_2.11 2.3.11后正常
3.错误: log能正常输出到终端,不能输出到文件
pom.xml中resources的配置不能使用如下的配置,而需要使用插件
<resources>
<!--控制资源文件的拷贝-->
<resource>
<directory>src/main/resources</directory>
<includes>
<!--<include>**/*.properties</include>-->
<include>**/*.xml</include>
<include>**/*.conf</include>
</includes>
<filtering>true</filtering>
<targetPath>${project.build.directory}</targetPath>
</resource>
</resources>
改为
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<!--<directory>${basedir}/src/main/resources</directory>-->
<directory>${basedir}</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.conf</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
1.错误:Class path contains multiple SLF4J bindings
如果错误表现成如下的形式:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
直接删除slf4j-log4j12或者在maven配置文件中
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
即可
如果不是提示: slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class
而是类似:aaaaa.jar!/org/slf4j/impl/StaticLoggerBinder.class
并且aaaaa.jar包是外部引入的依赖其它项目的包,那只能重编aaaaa.jar,并去掉对slf4j-api的依赖
2. 错误:can't be loaded [akka.event.slf4j.Slf4jLogger] due to [akka.event.Logging$LoggerInitializationException: Logger log1-Slf4jLogger did
logback-classic与akka-slf4j_2.11的版本不匹配会出现此错误
开始在项目中用logback-classic 1.2.3与akka-slf4j_2.11 2.4-M3 报不能加载的错误,换成logback-classic 1.0.9与akka-slf4j_2.11 2.3.11后正常
3.错误: log能正常输出到终端,不能输出到文件
pom.xml中resources的配置不能使用如下的配置,而需要使用插件
<resources>
<!--控制资源文件的拷贝-->
<resource>
<directory>src/main/resources</directory>
<includes>
<!--<include>**/*.properties</include>-->
<include>**/*.xml</include>
<include>**/*.conf</include>
</includes>
<filtering>true</filtering>
<targetPath>${project.build.directory}</targetPath>
</resource>
</resources>
改为
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<!--<directory>${basedir}/src/main/resources</directory>-->
<directory>${basedir}</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.conf</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>