标签: slf4j

Solr:如何拒绝记录

好了,我很高兴Solr的,但我似乎无法弄清楚如何调低日志记录级别,使其实际运行足够快,当我做一个巨大的进口运行.

我甚至不确定它正在使用哪个日志框架(因为,你知道,java.util.logging,log4jcommons-logging 都不够,我们需要将slf4j添加到混合中!)好抱歉,不得不让那个轻微的咆哮.:-)

所以我src/main/resources/log4j.properties配置了:

log4j.rootLogger=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n
org.apache.solr.core=WARN
org.apache.solr.update.processor=WARN
Run Code Online (Sandbox Code Playgroud)

然后,我已经src/main/resources/logging.properties配置了以下好的措施:

.level = WARNING

com.gwtstore.level=ALL
com.appgravity.level=ALL
org.apache.solr.core.level=WARNING
org.apache.solr.update.processor.level=WARNING
Run Code Online (Sandbox Code Playgroud)

然而不知何故,我仍然看到以下吨:

INFO: {add=[-7757828706308755634]} 0 0
Feb 21, 2011 6:12:23 PM org.apache.solr.core.SolrCore execute
INFO: [] webapp=null path=/update params={} status=0 QTime=0 
Run Code Online (Sandbox Code Playgroud)

这是我的类路径:

src/test/resources
src/test/java
src/main/resources
src/main/java
idea_rt.jar
junit-rt.jar
deploy.jar
dt.jar
javaws.jar
jce.jar
jconsole.jar
management-agent.jar
plugin.jar
sa-jdi.jar
alt-rt.jar
charsets.jar
classes.jar
jsse.jar
ui.jar
apple_provider.jar
dnsns.jar …
Run Code Online (Sandbox Code Playgroud)

java logging solr slf4j

26
推荐指数
1
解决办法
2万
查看次数

在静态和非静态上下文中创建SLF4J记录器的开销是多少?

我总是使用以下模式构建(SLF4J)记录器:

private static final Logger log = LoggerFactory.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

到目前为止这已经奏效了,但我想知道static某些情况下的上下文以及需要一直传递具体的类文字,而不是仅仅使用非静态记录器

private final Logger log = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)

这之前基本上已经问过(并回答)了LOG4J

记录器应该是私有静态还是非静态

和这里

记录器应该是最终的和静态的吗?

我意识到final基本上是强制性的,所以我想知道在非静态环境中使用SLF4J的开销实际上有多高.

问:

使用是否有任何重大的实际开销

private final Logger log = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)

过度

private static final Logger log = LoggerFactory.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

普通(网络)应用程序?(这里不需要"讨论"高端,重载的webapps)


注意,我最终计划使用更好的方法使用CDI获得SLF4J记录器

@Inject private final Logger log;
Run Code Online (Sandbox Code Playgroud)

http://www.seamframework.org/Weld/PortableExtensionsPackage#H-TtLoggerttInjection所述,但我需要先了解记录器缓存.

子问题:甚至可以使用?:

@Inject private static final Logger log;
Run Code Online (Sandbox Code Playgroud)

(刚开始用CDI开头)

java logging static slf4j cdi

26
推荐指数
1
解决办法
1万
查看次数

使用SLF4J API的NoSuchMethodError

当与slf4j一起使用时,

String test = blahblahblah;
logger.info("{}",test);
Run Code Online (Sandbox Code Playgroud)

跟踪如下

java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;

at org.slf4j.impl.JDK14LoggerAdapter.info(JDK14LoggerAdapter.java:304)
Run Code Online (Sandbox Code Playgroud)

java slf4j

25
推荐指数
2
解决办法
5万
查看次数

log4j,slf4j和logback有什么区别?

我对这三个记录器库有点困惑.看起来他们可以在java日志记录中做类似的事情......

java logging log4j slf4j java-ee

25
推荐指数
3
解决办法
7706
查看次数

是否有针对slf4j的Java 1.5 varargs API?

我想摆脱这一批......

public void info(String msg);
public void info(String format, Object arg);
public void info(String format, Object arg1, Object arg2);
public void info(String format, Object[] argArray);
Run Code Online (Sandbox Code Playgroud)

......并用这个替换它......

public void info(String format, Object ... args);
Run Code Online (Sandbox Code Playgroud)

...这样我的日志记录语法就不必根据我想记录的参数数量而改变.似乎有很多讨论和解决方法,但它在哪里?或者我应该包装slf4j的包装器?

java logging variadic-functions slf4j

24
推荐指数
5
解决办法
3569
查看次数

有什么理由在LogBack Logger上使用private而不是private final static?

在Spring Controller中实例化Logger时,有没有理由将它声明为静态final?LogConger不在MyController.class之外使用.我已经看到两个例子在使用,但不明白为什么我应该使用其中一个.

private Logger logger = LoggerFactory.getLogger(MyController.class);
Run Code Online (Sandbox Code Playgroud)

VS

private static final Logger logger = LoggerFactory.getLogger(MyController.class);
Run Code Online (Sandbox Code Playgroud)

java log4j logback slf4j

24
推荐指数
1
解决办法
6357
查看次数

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

我需要将System.out/err.println输出重定向到slf4j.

我知道这不是正确记录的方法,但有一个外部库,它记录到System.out

java logging log4j slf4j

24
推荐指数
2
解决办法
2万
查看次数

如何映射java.util.logging和SLF4J logger的级别?

如何将java.util.logging中的日志记录级别映射到SLF4J?

SLF4J

  • 跟踪
  • 调试
  • 信息
  • 警告
  • 错误
  • 致命

java.util.logging中

  • 最好的
  • 精细
  • 配置
  • 信息
  • 警告
  • 严重

java logging slf4j java.util.logging

24
推荐指数
1
解决办法
1万
查看次数

如何让泽西使用SLF4J代替JUL?

我找到了一篇有用的文章,解释了如何让泽西使用SLF4J而不是JUL.现在我的单元测试看起来像(并且它完美地工作):

public class FooTest extends JerseyTest {
  @BeforeClass
  public static void initLogger() {
    java.util.logging.Logger rootLogger =
      java.util.logging.LogManager.getLogManager().getLogger("");
    java.util.logging.Handler[] handlers = rootLogger.getHandlers();
    for (int i = 0; i < handlers.length; i++) {
      rootLogger.removeHandler(handlers[i]);
    }
    org.slf4j.bridge.SLF4JBridgeHandler.install();
  }
  public FooTest() {
    super("com.XXX");
  }
  @Test
  public void testSomething() throws Exception {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

pom.xml包括这些依赖项:

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.6.1</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.6.1</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jul-to-slf4j</artifactId>
  <version>1.6.1</version>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.16</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但我不想在每个单元测试中进行相同的配置.这是一个明显的代码重复,我想避免.我怎样才能更有效地做到这一点?

PS.也许不可能优化上面的代码,我尽我所能?

java logging log4j jersey slf4j

23
推荐指数
2
解决办法
1万
查看次数

如何禁用Spring logging DEBUG消息?

我正在开发一个简单的桌面应用程序(不是webapp).

这是我的log4j.properties:

log4j.rootCategory=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L $$$$ %m%n

log4j.logger.org.springframework=ERROR,stdout
Run Code Online (Sandbox Code Playgroud)

如您所见,为了从控制台中消除Spring日志消息,我尝试了这个解决方案:

禁用Spring日志,以获取可读日志

当我从我的代码调用log4j logger时,日志消息是根据上面指定的模式(这是好的).

然而,坏的部分是 - 我仍然从春天到达控制台DEBUG级别的消息......它们看起来像这里: 无法禁用日志消息

他们有不同的模式.好像他们忽略了我的设置.

我也尝试应用我在这里找到的建议:

https://spring.io/blog/2009/12/04/logging-dependencies-in-spring

在我的pom文件中:

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <scope>runtime</scope>
    </dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.2.0.RELEASE</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

而且没有SLF4J.如果我没有错,上述链接中提到此选项是有效选项.

我可能会在这里失踪什么?

输出-Dlog4j.debug = true

log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@172aa3f.
log4j: Trying to find [log4j.xml] using sun.misc.Launcher$AppClassLoader@172aa3f class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@172aa3f.
log4j: Using URL …
Run Code Online (Sandbox Code Playgroud)

java spring log4j slf4j apache-commons-logging

23
推荐指数
1
解决办法
4万
查看次数