我有这个第三方图书馆:
我想针对这个库编写一些测试并查看它的日志输出,我不想再添加任何日志库(没有log4j或其他任何东西).
据我所知,SLF4J和通用日志都记录抽象性,因此我可能需要写我自己的简单具体记录器(或许不是,因为JCL-过SLF4J包括org.apache.commons.logging.impl.SimpleLog?).如果是这样,我应该实现哪些接口,更重要的是,如何设置SL4J/Common Logging以在我的测试中使用我的记录器?我在SLF4J文档中读到我必须修改StaticLoggerBinder类 ...这是否真的意味着我实际上必须下载SLF4J源代码,修改类并重新编译它?
我正在使用SLF4J + Logback将消息输出到eclipse IDE控制台.
Logger LOG = LoggerFactory.getLogger(MyClass.class);
LOG.debug("test");
Run Code Online (Sandbox Code Playgroud)
但有时整个控制台输出被清除,我看不到更旧的消息.这是足够的信息,以便你可以帮助我吗?
我是新登录用户,并且有一个一般性问题。我将在Eclipse中进行开发,并且想知道将配置文件放置在哪里。例如我的类Test.java位于ProjectName / src / default package / Test.java中
我在哪里放置配置文件?我需要创建一个新文件夹还是将其放置在同一位置?
所以,
我正在使用这个BONECP示例:
package javasampleapps;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;
/** A test project demonstrating the use of BoneCP in a JDBC environment.
* @author wwadge
*/
public class BoneCPExample {
/** Start test
* @param args none expected.
*/
public static void main(String[] args) {
BoneCP connectionPool = null;
Connection connection = null;
try {
// load the database driver (make sure this is in your classpath!)
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Solr与slfj4和logback,当我用CTRL + C关闭Solr时,我收到此错误:
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
Run Code Online (Sandbox Code Playgroud)
这在编译期间不会发生.
我在版本1.6.4中检查了org.slf4j.spi.LocationAwareLogger.log的方法签名,它似乎是正确的:
public void log(Marker marker, String fqcn, int level, String message, Object[] argArray, Throwable t);
Run Code Online (Sandbox Code Playgroud)
完整的堆栈跟踪:
2012-04-27 12:02:09.806 [Shutdown] ERROR o.a.s.h.c.HttpShardHandlerFactory - 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.shutdown(ThreadSafeClientConnManager.java:282)
at org.apache.solr.handler.component.HttpShardHandlerFactory.close(HttpShardHandlerFactory.java:172)
at org.apache.solr.core.CoreContainer.shutdown(CoreContainer.java:599)
at org.apache.solr.servlet.SolrDispatchFilter.destroy(SolrDispatchFilter.java:124)
at org.mortbay.jetty.servlet.FilterHolder.destroyInstance(FilterHolder.java:127)
at org.mortbay.jetty.servlet.FilterHolder.doStop(FilterHolder.java:107)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:76)
at org.mortbay.jetty.servlet.ServletHandler.doStop(ServletHandler.java:176) at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:76)
at org.mortbay.jetty.handler.HandlerWrapper.doStop(HandlerWrapper.java:142)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:76)
at org.mortbay.jetty.handler.HandlerWrapper.doStop(HandlerWrapper.java:142) at org.mortbay.jetty.servlet.SessionHandler.doStop(SessionHandler.java:125)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:76)
at org.mortbay.jetty.handler.HandlerWrapper.doStop(HandlerWrapper.java:142)
at org.mortbay.jetty.handler.ContextHandler.doStop(ContextHandler.java:592) at org.mortbay.jetty.webapp.WebAppContext.doStop(WebAppContext.java:537)
at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStop(Jetty6PluginWebAppContext.java:1
23)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:76) at org.mortbay.jetty.handler.HandlerCollection.doStop(HandlerCollection.java:169)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:76)
at org.mortbay.jetty.handler.HandlerCollection.doStop(HandlerCollection.java:169)
at org.mortbay.component.AbstractLifeCycle.stop(AbstractLifeCycle.java:76) …Run Code Online (Sandbox Code Playgroud) 我想提供一个客户端库,用于将rest-request包装到服务器并记录错误,以便客户端可以在他的应用程序中使用它并查看日志.(还有一个问题,我是否应该只记录错误或重新抛出它.当我使用异步调用(多线程)时,这可能非常棘手..)
我读到slf4j可能会有所帮助,因为使用该库的客户端可以选择他喜欢的日志框架.
有些人对这个slf4j事情感到困惑.如果他得到我的库并且我只是提供,让我们说slf4j-api,将抛出错误,因为不包括SLF4J绑定.解决方案可能是他必须自己包含绑定,问题是他是否愿意阅读README来获取这些重要信息.
如果我包含一个"标准"-slf4j绑定(例如简单的绑定),则应用程序无法"覆盖"此操作,因为类路径上只允许一个绑定.任何时候它都不会灵活
所以我想只使用log4j并忘记其他所有日志框架.我可能会认为这个问题很复杂,也许有人可能会帮我解决这个问题?
我不能配置Log4j2来读取XML文件的配置在工作目录.
我试图设置系统属性,因为文档说:
Log4j将检查"log4j.configurationFile"系统属性,如果设置,将尝试使用与文件扩展名匹配的ConfigurationFactory加载配置
使用Main类静态初始化程序块,也在main方法中,具有相对和绝对路径:
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
"E:/log4j2.xml");
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
"./log4j2.xml");
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
"log4j2.xml");另外随着"log4j.configurationFile"代替XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY并没有什么的的作品.
只有将XML添加到我的类路径中并将其放在src目录中时,此配置才有效.我想通过编辑工作目录中的XML文件来允许编译后的lightweid配置.
使用的依赖项:
我遇到一个问题,maven在运行JUnit测试时没有找到slf4j类:
22:20:05,412 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
22:20:05,412 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:/home/ram/src/2dd/java/dd2/target/test-classes/logback-test.xml]
22:20:05,526 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.RollingFileAppender]
22:20:05,527 |-ERROR in ch.qos.logback.core.joran.action.AppenderAction - Could not create an Appender of type [ch.qos.logback.core.RollingFileAppender]. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.core.RollingFileAppender
Run Code Online (Sandbox Code Playgroud)
但是,slf4j jar文件正被添加到类路径中:
[DEBUG] test classpath classpath:
[DEBUG] /home/ram/src/2dd/java/dd2/target/test-classes
[DEBUG] /home/ram/src/2dd/java/dd2/target/classes
[DEBUG] /home/ram/.m2/repository/junit/junit/4.11/junit-4.11.jar
[DEBUG] /home/ram/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
[DEBUG] /home/ram/.m2/repository/com/fallabs/kyotocabinet-java/1.24/kyotocabinet-java-1.24.jar
[DEBUG] /home/ram/.m2/repository/ch/qos/logback/logback-classic/1.0.13/logback-classic-1.0.13.jar
[DEBUG] /home/ram/.m2/repository/ch/qos/logback/logback-core/1.0.13/logback-core-1.0.13.jar
[DEBUG] /home/ram/.m2/repository/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar
[DEBUG] provider classpath classpath:
[DEBUG] /home/ram/.m2/repository/org/apache/maven/surefire/surefire-junit4/2.12.4/surefire-junit4-2.12.4.jar …Run Code Online (Sandbox Code Playgroud) SLF4J是一个包装器/外观类,因此您可以使用许多不同的日志类型,例如logback,log4j等.假设我想使用logback和log4j,甚至第三个类似java.util.logging.当我写这样的日志:
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么知道它使用哪个日志框架?假设我希望它使用logback进行此调用,我怎么知道它不使用另一个框架?