Tag: slf4j

将System.out.println重定向到Log4J,同时保留类名信息

我有一些库在我身上调用System.out.println,我想通过log4j或commons日志记录重定向它们。 但特别是我想保留完全限定的类名,以便我知道哪个组件生成了日志。 有一个很好的,有序的方法来实现这一目标吗? 更新:完成此操作后,我在这里发布了代码: http://www.bukisa.com/articles/487009_java-how-to-redirect-stderr-and-stdout-to-commons-logging-with-the-calling-class

如何通过JUnit测试拦截SLF4J日志记录?

是否有可能通过JUnit测试用例以某种方式拦截日志记录(SLF4J + logback)并获取InputStream (或其他可读的东西)?

类路径包含多个SLF4J绑定

我的应用服务器ibm websphere。 我在应用程序服务器日志中收到以下错误。 我在哪里可以进行websphere设置? [19.09.2012 14:56:54:940 EEST] 0000000a SystemErr R SLF4J:类路径包含多个SLF4J绑定。 [19.09.2012 14:56:54:940 EEST] 0000000a SystemErr R SLF4J:在[wsjar:file:/ C:/Lib/slf4j-log4j12-1.6.1.jar!/ org / slf4j / impl / StaticLoggerBinder中找到绑定。类] [19.09.2012 14:56:54:941 EEST] 0000000a SystemErr R SLF4J:在[bundleresource://217.fwk37356669:1 / org / slf4j / impl / StaticLoggerBinder.class]中找到绑定 [19.09.2012 14:56:54:941 EEST] 0000000a SystemErr R SLF4J:请参阅http://www.slf4j.org/codes.html#multiple_bindings以获得解释。

Maven + SLF4J:使用需要两个不同SLF4J版本的两个不同依赖项时版本冲突

我有一个独立使用两个依赖项的项目:BoneCP和Hibernate。 但是由于SLF4J及其版本冲突它不起作用,因为BoneCP需要SLF4J 1.5而Hibernate需要SLF4j 1.6。 如您所知,不可能在pom.xml中重要的两个不同版本的相同依赖项。 那么我该怎么办才能解决这个惊人的SLF4J副作用? 我得到的错误是臭名昭着的: SLF4J: The requested version 1.5.10 by your slf4j binding is not compatible with [1.6] SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details. 我需要添加它,但不允许使用两个不同版本的相同依赖: org.slf4j slf4j-log4j12 1.5.10 provided org.slf4j slf4j-log4j12 1.6.2 provided Maven依赖树: [INFO] [dependency:tree {execution: default-cli}] [INFO] org.mentawai:menta:war:1.0.5-SNAPSHOT [INFO] +- javax.servlet.jsp:jsp-api:jar:2.0:provided [INFO] +- javax.servlet:servlet-api:jar:2.5:provided [INFO] +- javax.activation:activation:jar:1.1:compile [INFO] +- javax.mail:mail:jar:1.4:compile […]

Hibernate 3.4与slf4j和log4j

我正在尝试从Hibernate 3.2升级到3.4,这显然使用了slf4j。 我们的项目目前使用log4j。 所以我的假设是我应该使用slf4j-log4j12包装实现。 Maven slf4j依赖是: org.slf4j slf4j-log4j12 1.5.6 而log4j依赖是: log4j log4j 1.2.15 slf4j-log4j12和log4j都引用了最新版本(我可以在Maven存储库中找到)。 当我运行我的应用程序时,Hibernate的日志记录失败: java.lang.NoSuchFieldError: name at org.slf4j.impl.Log4jLoggerAdapter.(Log4jLoggerAdapter.java:75) at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:75) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103) at org.hibernate.cfg.Configuration.(Configuration.java:163) … 我错过了什么? 编辑1:如果我从我的pom.xml中删除了log4j依赖项,我收到错误: java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory at org.slf4j.LoggerFactory.(LoggerFactory.java:60) at org.hibernate.cfg.Configuration.(Configuration.java:163) … 编辑2: 此博客声称问题是由使用错误版本的slf4j-api.jar的hibernate注释引起的。

每次使用log4j运行一个日志文件

如何将log4j.properties配置为每次运行应用程序时只有一个日志文件。 我已经读过你应该在文件名中使用时间戳,但随着时间的推移,每次运行会创建许多文件。 我尝试过DailyRollingFileAppender和RollingFileAppender但是找不到一种方法来为每次运行配置一个日志。 不应将日志分成多个日志,也不应截断日志,应保留旧运行的文件。 每个类都有一个静态的org.slf4j.Logger,它有自己的类名: private static final Logger log = LoggerFactory.getLogger(Foo.class); 这是我当前的log4j.properties log4j.rootLogger=error, RootAppender, RootErrorAppender #log4j.logger.com.example=info, qspaBackendAppender, stderr log4j.logger.com.example=info, qspaBackendAppender log4j.additivity.com.example=true #log4j.logger.com.example.util=trace, qspaBackendAppender, stderr #log4j.additivity.com.example.util=true log4j.appender.qspaBackendAppender=org.apache.log4j.DailyRollingFileAppender log4j.appender.qspaBackendAppender.file=logs/qspaBackend.log log4j.appender.qspaBackendAppender.layout=org.apache.log4j.PatternLayout log4j.appender.qspaBackendAppender.layout.ConversionPattern= %-5p : %C{1} %c{2} : %m%n log4j.appender.stderr=org.apache.log4j.ConsoleAppender log4j.appender.stderr.Target=System.err log4j.appender.stderr.layout=org.apache.log4j.PatternLayout log4j.appender.stderr.layout.ConversionPattern=%-5p %c{1}:%L – %m%n log4j.appender.RootAppender=org.apache.log4j.RollingFileAppender log4j.appender.RootAppender.file=logs/root.log log4j.appender.RootAppender.layout=org.apache.log4j.PatternLayout log4j.appender.RootAppender.layout.ConversionPattern= %-5p : %C{1} %c{2} : %m%n log4j.appender.RootErrorAppender=org.apache.log4j.RollingFileAppender log4j.appender.RootErrorAppender.file=logs/rootError.log […]

SLF4J – Logback:如何在运行时配置记录器?

我们正在使用LogBack和我们的项目,我想根据一些数据库值配置记录器,即如果某个DB值设置为true,那么logger应该同时使用文件和DB appender,如果它是false,那么logger必须只使用DB appender , 我还想保留使用静态最终记录器,因此每次调用记录器时我都不会创建新实例, 那我怎么能这样做呢? 问候,

LocationAwareLogger上的SLF4J NoSuchMethodError

这个问题之前已被提出过,但不幸的是,似乎没有任何解决方案对我有用。 我正面临这个exception(使用精简堆栈跟踪): java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug(SLF4JLocationAwareLog.java:133) at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:221) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) 使用命令行Maven进行编译时以及部署到Tomcat时会发生这种情况。 它在IntelliJ IDEA中工作正常。 通常我希望这是由正在使用的SLF4J库的多个版本引起的。 但Maven依赖树在单个版本中显示所有slf4j库: ..$ mvn dependency:tree | grep slf4j [INFO] +- org.slf4j:slf4j-simple:jar:1.6.4:compile [INFO] | \- org.slf4j:slf4j-api:jar:1.6.4:compile [INFO] +- org.slf4j:slf4j-api:jar:1.6.4:compile [INFO] +- org.slf4j:jcl-over-slf4j:jar:1.6.4:compile [INFO] +- org.slf4j:slf4j-simple:jar:1.6.4:compile 我甚至确保〜/ .m2 / repository中没有其他JAR 也没有对commons-logging库的引用(我将它们全部排除在外,因为依赖树已经确认了。 我该如何解决这个问题? 我的想法已经不多了。 编辑:这里要求完全依赖,首先是父POM: org.hibernate hibernate-validator ${org.hibernate.validator.version} org.slf4j slf4j-api org.hibernate hibernate-validator-annotation-processor ${org.hibernate.validator.version} […]

Dropwizard不会将自定义记录器记录到文件中

我有一个dropwizard应用程序,我将logger appender配置为文件,如下所示: logging: level: INFO loggers: “mylogger”: INFO “com.path.to.class”: INFO appenders: – type: file currentLogFilename: .logs/mylogs.log archivedLogFilenamePattern: .logs/archive.%d.log.gz archivedFileCount: 14 并且,在我的应用中创建了记录器: import org.slf4j.Logger; import org.slf4j.LoggerFactory; private final Logger OpLogger = LoggerFactory.getLogger(“mylogger”); (and) private final Logger ClassLogger = LoggerFactory.getLogger(pathToClass.class); 在main()中进行一些测试记录: OpLogger.info(“test 1”); ClassLogger.info(“test 2); 应用程序启动并运行没有问题; 但我没有得到任何日志(除了Jetty访问日志,当然,正确打印到mylogs.log),无论是在stdout还是在mylogs.log文件中。 相反,如果我删除configuration.yml中的记录器配置,我会将所有日志打印到stdout。 也许这是dropwizard的问题,或者我必须在configuration.yml中添加一些东西? 我正在使用Dropwizard 0.8.0

将System.out和System.err重定向到slf4j

我需要将System.out / err.println输出重定向到slf4j。 我知道这不是正确记录的方法,但有一个外部库,它记录到System.out