我正在构建一个小型Java应用程序,并希望使用logback进行日志记录.
我的应用程序依赖于通过其进行日志记录的旧项目
org.apache.commons | com.springsource.org.apache.commons.logging | 1.1.1
......所以我的计划是使用
org.slf4j | jcl-over-slf4j | 1.5.6
...将JCL日志记录重定向到
org.slf4j | slf4j-api | 1.6.0
......最终到了
ch.qos.logback | logback-classic | 0.9.22
ch.qos.logback | logback-core | 0.9.22
所以我的应用程序可以通过其slf4j API登录logback,而旧的库代码可以通过重定向登录到同一位置.
唉,这导致了
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V
at   org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:141)
我已经在其中一些罐子上尝试过更高和更低的版本号,并且还通过API文档等进行挖掘...但我无法找到并解决问题.
请帮忙?
虽然logback被认为是"战略"日志框架,但我有一些余地,我最终使用哪种日志记录机制.我希望使用logback或log4j,我肯定希望通过常见配置将旧项目的日志记录合并到"新"日志框架最终的任何内容中.
将m2e更新为1.1版后出现上述错误.通过删除m2e 1.1并回滚到m2e 1.0一切正常.我试图在Windows和Ubuntu中重复这个问题,它给了我完全相同的错误.测试了slf4j-api和logback的许多配置,但似乎都没有.
即使没有声明slf4j依赖项,错误也会出现在任何maven项目中.
New Maven项目 - > maven-archetype-quickstart
和
New Maven项目 - >没有原型选择的简单项目
结果
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
在Mac上使用Eclipse Indigo和Eclipse Juno(32位和64位)测试,在Ubuntu上测试32位,在Windows上测试64位和32位测试.测试了Juno Classic,Juno Modeling工具,Kepler Standard,Kepler Modeling Tools的全新安装并产生了同样的错误.
出现错误,包括清理,安装,测试,部署,生成源 …
我在网上看到过几个关于如何使用XML架构或DTD for logback.xml文件至少在IDEA或Eclipse等IDE中进行非常基本的验证和自动完成的讨论,但我从未见过任何解决方案
你是否?
我第一次听到标记时读到:
我检查Logger对象的可用方法:
并找到接口:
我得到的更深入的信息:
但仍然困惑...请注意,我问为什么,而不是如何使用它们,所以这不是重复:
更新似乎在使用标记时,您还需要编写自定义Java代码,而不是在XML或.property文件中进行配置...
更新2来自http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator
Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdmin,
  "This is a serious an error requiring the admin's attention",
   new Exception("Just testing"));
我已经完成了logback的所有文档,在日志记录时无法找到配置编码器模式的文档,例如:
<encoder>
  <pattern>%d{HH:mm:ss.SSS} %-4relative %-5level %logger{35} - %msg%n</pattern>
</encoder>
我想要一个表(就像log4j那样)解释配置模式的不同选项.
模式的文档在哪里?也许他们是在另一个项目中定义的?
新项目是否应使用logback而不是log4j作为日志记录框架?
或者换句话说:'logback是否比log4j好(留下SLF4J -'feature'的logback旁边)?'
有没有办法禁用可爱但非常明显的ASCII Spring启动徽标:
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.1.8.RELEASE)
...每次运行弹簧启动应用程序时,都会在STDOUT中转储?
我在logback.xml中将所有日志记录切换为ERROR,但这没有做任何事情:
<root level="ERROR">
    <appender-ref ref="STDOUT" />
</root>
编辑:它在文档中不称为"徽标".搜索友好的术语是一个"横幅".
我的一个maven模块在运行测试时忽略了我的日志记录级别.
在src/test/resources中我有application.properties:
app.name=bbsng-import-backend
app.description=Import Backend Module for Application
spring.profiles.active=test
# LOGGING
logging.level.root=error
logging.level.org.springframework.core =fatal
logging.level.org.springframework.beans=fatal
logging.level.org.springframework.context=fatal
logging.level.org.springframework.transaction=error
logging.level.org.springframework.test=error
logging.level.org.springframework.web=error
logging.level.org.hibernate=ERROR
我也尝试过application-test.properties.
我的应用程序记录很多,特别是在加载上下文时.我尝试了logback.xml,logback-test.xml和logback-spring.xml,但没有任何帮助.
我的pom:
<parent>
    <groupId>at.company.bbsng</groupId>
    <artifactId>bbsng-import</artifactId>
    <version>0.1.0-SNAPSHOT</version>
</parent>
<artifactId>bbsng-import-backend</artifactId>
<name>bbsng-import-backend</name>
<properties>
    <start-class>at.company.bbsng.dataimport.ApplicationImportBackend</start-class>
</properties>
<dependencies>
    <!-- APPLICATION ... -->
    <dependency>
        <groupId>at.company.bbsng</groupId>
        <artifactId>bbsng-app-domain</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- SPRING ... -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- JAVAX ... -->
       ...
    <!-- COMMONS ... -->
       ...
    <!-- LOMBOK ... -->
       ...
    <!-- DB -->
       ... …我在logback.xml中定义了一个logback appender,它是一个DB appender,但我很好奇是否有任何方法可以使用我自己定义为bean的连接池在java中配置appender.
我找到类似的东西,但从来没有真正的答案.
我目前正在观察第三方库(即restfb)正在使用java.util.logging并且我看到这些日志最终在STDOUT中,即使我没有在我的logback.xml中配置SLF4J控制台appender.我的classpath中也有jul-to-slf4j桥.jul-to-slf4j网桥是否仅在安装网桥时登录到由logback配置的appender,还是还记录到stdout?