我正在努力完成"Beginning Hibernate 3.5",我遇到了一个初步障碍.
当我运行时ant exportDDL,我收到以下错误:
exportDDL:
[htools] Executing Hibernate Tool with a Hibernate Annotation/EJB3 Configuration
[htools] 1. task: hbm2ddl (Generates database schema)
[htools] SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8]
[htools] SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
[htools] An exception occurred while running exporter #2:hbm2ddl (Generates database schema)
[htools] To get the full stack trace run ant with -verbose
[htools] Problems in creating a AnnotationConfiguration. Have you remembered …Run Code Online (Sandbox Code Playgroud) 我目前使用Eclipse和本地Tomcat 7服务器开发一个简单的Web应用程序.我配置了Eclipse,所以我可以从我的IDE中启动Tomcat 7 - 这里没什么了不起的.
在我的网络应用程序中,我使用SLF4J和Logback,在服务类中看起来像这样:
public class MyServiceImpl implements MyService
{
private static Logger logger = LoggerFactory.getLogger( MyServiceImpl.class );
public void doSomeStuff()
{
logger.info( "Doing some stuff" );
}
}
Run Code Online (Sandbox Code Playgroud)
我的日志记录是这样配置的:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log/MyTestWebApp.%d.log.zip</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.test" level="WARN" />
<root level="WARN">
<appender-ref ref="fileAppender" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
当我启动我的Web应用程序以及本地Tomcat 7服务器时,日志输出将转到
./log/MyTestWebApp.log
Run Code Online (Sandbox Code Playgroud)
正如所料,当前目录是我的Web应用程序所在的目录(例如,我的Maven pom.xml所在的目录).
当我在远程linux机器上启动我的Web应用程序时,我找不到任何"MyTestWebApp.log"文件,不是在我的web应用程序的directoy中,也不是在Tomcat7-root目录中.
所以我的简单问题是,这些日志分别在哪里,我的"MyTestWebApp.log"文件在哪里?
非常感谢你的帮助!
我试图用我的Grails应用程序替换log4j并使用logback,但我总是得到一个
Embedded error: java.lang.reflect.InvocationTargetException
org.apache.log4j.LogManager
Run Code Online (Sandbox Code Playgroud)
在运行run-app或test-app时.
我在BuildConfig.groovy中包含了以下内容,我认为这就足够了:
inherits("global") {
excludes "slf4j-log4j12"
}
[...]
dependencies {
build 'ch.qos.logback:logback-core:0.9.29', 'ch.qos.logback:logback-classic:0.9.29'
runtime 'ch.qos.logback:logback-core:0.9.29', 'ch.qos.logback:logback-classic:0.9.29'
}
Run Code Online (Sandbox Code Playgroud)
我找不到更多对Log4J的引用,也不知道这个调用来自哪里?!
我也尝试用1.6.2替换Grails slf 1.5.8并在控制台中获得以下内容尽管已从所有Grails模块中排除了slf:
SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助
问候
乔纳斯
什么是最好的记录器框架,在Android系统中完美地用于将文本记录到文件中?
我尝试使用SLF4J-android,但我得到了一个例外
04-29 12:58:57.604: E/AndroidRuntime(372): java.lang.NoClassDefFoundError: org.slf4j.LoggerFactory
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
public class Main extends TabActivity {
private static final Logger log = LoggerFactory.getLogger(Main.class);
Run Code Online (Sandbox Code Playgroud)
我将slf4j-android-1.6.1-RC1.jar添加到构建路径中
会有什么问题?
我很好奇Log4J 1.2和2.0之间的差异,因为我一直在尝试运行我在网上发现的一个演示(这里是视频),我遇到了问题.我对SLF4J在所有这些方面的作用特别感到好奇,即你需要一个特定的SLF4J来支持1.2和2.0吗?
谢谢!
我有一个使用Slf4j和java.util.Logging设置的日志记录机制.我有几个线程,所以我无法从日志中得到一个清晰的想法,因为它们是混合的.现在我尝试使用MDC概念在日志文件中添加更多数据,以便它们清晰.
问题与Slf4j中的一样,虽然它支持MDC java.util.Logging不支持.但它说
如果底层框架不提供MDC,例如java.util.logging,则SLF4J仍将存储MDC数据,但其中的信息需要由自定义用户代码检索.
我正在尝试找到一种方法来执行此自定义代码.谷歌搜索对我没什么帮助.Slf4j中有一个名为"BasicMDCAdapter"的辅助类.但我不知道如何使用它.我无法在任何地方找到示例代码.
这也是一个有助于此的代码,但仍然没有给出一些描述.
我很感激这里的帮助.
谢谢.
我在Spring学习Slf4j和log4j.我已经看到了我们使用一行的eyery
private final Logger logger = LoggerFactory.getLogger(name.class);
Run Code Online (Sandbox Code Playgroud)
我已经看到这是默认情况下获取root logger.
如何获得root logger?我错了吗?
如何获取log4j.xml文件中定义的其他记录器?
这是我的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC
"-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
debug="false">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n" />
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</appender>
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/log/spring-hib.log" />
<param name="MaxBackupIndex" value="100" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n" />
</layout>
</appender>
<logger name="com.example.foo">
<level value="DEBUG"/> …Run Code Online (Sandbox Code Playgroud) 我有一个带注释的Groovy类@Slf4j,所以它得到一个私有的final Logger log字段,我想测试它的用法.我想继续使用@Slf4j并且不再公开该log字段以便进行测试.
我正在使用Spock 1.0编写测试,并尝试使用Spock的集成模拟和存根功能来完成此操作.全局存根应该帮助我拦截LoggerFactory调用以获取实际Logger实例,所以我目前的猜测是这样的:
LoggerFactory logFactory = GroovyStub(global: true)
logFactory.getLogger(_) >> Mock(Logger)
// create my @Slf4j-annotated object afterwards
Run Code Online (Sandbox Code Playgroud)
有趣的是,拦截实际上有效,println确认该类实际上获得了一个对象Mock for type 'Logger' named 'dummy',但是指示存根返回模拟的第二个语句似乎没有捕获.相反,默认存根行为返回另一个存根,当然不能用于模拟:
org.spockframework.runtime.InvalidSpecException: Stub 'dummy' matches the following required interaction:
1 * plugin.log.warn(_) (0 invocations)
Remove the cardinality (e.g. '1 *'), or turn the stub into a mock.
Run Code Online (Sandbox Code Playgroud)
我需要更改什么才能让存根LoggerFactory返回模拟Logger?
执行async时CompletableFuture,父线程org.slf4j.MDC上下文以及上下文会丢失。
这很不好,因为我使用某种“鱼标签”来跟踪多个日志文件中一个请求的日志。
MDC.put("fishid", randomId())
问题:一般情况下,我该如何保留该ID CompletableFutures?
List<CompletableFuture<UpdateHotelAllotmentsRsp>> futures =
tasks.stream()
.map(task -> CompletableFuture.supplyAsync(
() -> businesslogic(task))
.collect(Collectors.toList());
List results = futures.stream()
.map(CompletableFuture::join)
.collect(Collectors.toList());
public void businesslogic(Task task) {
LOGGER.info("mdc fishtag context is lost here");
}
Run Code Online (Sandbox Code Playgroud) 现有的Spring Boot应用程序正在使用SLF4J记录器。我决定通过opentracing使用Jaeger作为跟踪器的标准API 添加对分布式跟踪的支持。初始设置多么容易,真是太神奇了-所需要的只是在上添加两个依赖项pom.xml:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-web-autoconfigure</artifactId>
<version>${io.opentracing.version}</version>
</dependency>
<dependency>
<groupId>io.jaegertracing</groupId>
<artifactId>jaeger-core</artifactId>
<version>${jaegerVersion}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
并为TracerBean提供配置:
@Bean
public io.opentracing.Tracer getTracer() throws ConfigurationException {
return new new io.jaegertracing.Tracer.Builder("my-spring-boot-app").build();
}
Run Code Online (Sandbox Code Playgroud)
所有工作都像一个咒语-Jaeger处理应用程序请求并创建跨度:
但是,在跨度Logs中,只有preHandle&afterCompletion事件包含在请求执行期间被调用的有关类/方法的信息(不slf4j收集由logger 生成的日志):
现在的问题是,如果它是可以配置示踪至拾取由应用记录仪(产生的日志slf4j在我的情况),使所有的应用程序日志进行经由:LOG.info/ LOG.warn/ LOG.error等将也反映在积
注意:我想出了如何通过API 手动记录跨度,opentracing例如:
Scope scope = tracer.scopeManager().active();
if (scope != null) {
scope.span().log("...");
}
Run Code Online (Sandbox Code Playgroud)
并对标签进行一些手动操作,ERROR以便在过滤器中进行异常处理,例如
} catch(Exception ex) {
Tags.ERROR.set(span, true); …Run Code Online (Sandbox Code Playgroud)