标签: logback

为什么不建议每次都调用LoggerFactory.getLogger(...)?

我已经阅读了很多帖子和文档(在这个网站和其他地方),指出SFL4J日志记录的推荐模式是:

public class MyClass {
    final static Logger logger = LoggerFactory.getLogger(MyClass.class);

    public void myMethod() {
        //do some stuff
        logger.debug("blah blah blah");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的老板更喜欢我们只使用一个包装器来拦截日志调用,并避免使用样板代码来声明每个类的记录器:

public class MyLoggerWrapper {
    public static void debug(Class clazz, String msg){
        LoggerFactory.getLogger(clazz).debug(msg));
    }
}
Run Code Online (Sandbox Code Playgroud)

并简单地使用它:

public class MyClass {

    public void myMethod() {
        //do some stuff
        MyLoggerWrapper.debug(this.getClass(), "blah blah blah");
    }
}
Run Code Online (Sandbox Code Playgroud)

我假设每次我们记录时实例化一个记录器有点贵,但我一直无法找到支持该假设的任何文件.除此之外他肯定说框架(LogBack或Log4J我们仍在决定)将"缓存"记录器,而且无论如何服务器的运行速度都远低于它们的容量,所以这不是问题.

有任何帮助指出这种方法的潜在问题?

java logging log4j logback slf4j

42
推荐指数
8
解决办法
6万
查看次数

运行Spring-Boot时忽略-Dlogback.configurationFile = logback.xml

我们有一个spring-boot 1.0.RC1应用程序,其中配置了用于日志记录的logback和src/test/resources中的logback.xml文件.当我们从maven运行spring-boot时,似乎可以看到并遵守logback文件.(这是我们在spring-boot徽标之后所需的日志记录格式)

D:\Users\myName\My Projects\Work\my-co\my-app\src\my-app\my-app-camel>mvn  clean spring-boot:run -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener -Dlogback.configurationFile=src/test/resources/logback.xml

<snip/>

[INFO] --- spring-boot-maven-plugin:0.5.0.M7:run (default-cli) @ my-app-camel ---
06:41:56,011 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [src/test/resources/logback.xml] at [file:/D:/Users/myName/My%20Projects/Work/my-co/my-app/src/my-app/my-app-camel/src/test/resources/logback.xml]
06:41:56,150 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
06:41:56,170 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeFilter scanning period to 5 seconds
06:41:56,171 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[D:\Users\myName\My Projects\Work\my-co\my-app\src\my-app\my-app-camel\src\test\resources\logback.xml]] every 5 seconds.
06:41:56,172 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
06:41:56,223 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to …
Run Code Online (Sandbox Code Playgroud)

spring logback spring-boot

42
推荐指数
4
解决办法
5万
查看次数

如何使用logback创建2个不同的ROOT记录器?

我很高兴使用SLF4J进行回溯并使用2个appender作为ROOT记录器.

<root level="DEBUG">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
</root>
Run Code Online (Sandbox Code Playgroud)

我们怎样才能为两个appender提供不同的日志级别?我仍然需要所有ROOT-logger消息.

  • STDOUT的DEBUG -level
  • 信息的INFO -level

所有日志都需要成为输出的一部分(因此需要ROOT记录器).

logging logback root slf4j

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

以编程方式设置logback.xml路径

我知道我可以像这样设置logback.xml路径:

将默认配置文件的位置指定为系统属性

您可以使用名为"logback.configurationFile"的系统属性指定默认配置文件的位置.此属性的值可以是URL,类路径上的资源或应用程序外部文件的路径.

java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1
Run Code Online (Sandbox Code Playgroud)

但我怎么能在代码中做到这一点?

java logback

41
推荐指数
3
解决办法
5万
查看次数

Log4j 2.0和SLF4J以及java日志框架的永无止境的未来

所以我今天才发现Log4J 2.0现在正在积极开发中,有一个alpha版本,据说它取代了logback.

现在在我的应用程序中,我有接近4个可能更多的日志框架:

  • Java Util日志
  • log4j的
  • SLF4J
  • logback(由于maven提供hack而被忽略)
  • 公共记录(由于提供黑客的maven而被忽略)
  • 并且tomcat有自己的JULI适配器

我一直在使用log4j(1.2.x),因为坦率地说我只是不需要新人的功能,但我最近一直试图切换到SLF4J,主要是因为我不想重写我复杂的log4j配置文件到新格式(logback).

现在我的问题是我应该编写的代码是SLF4J,对于未来的log4j 2.0来说是正确的选择.

看起来我应该坚持使用旧的log4j(1.2.x),因为它是最低的共同点?

更新:在进一步检查log4j 2.0时,看起来非常相似,配置与log4j 1.2不向后兼容.看起来像logback是最好的选择.

java logging log4j logback slf4j

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

Logback和Jboss 7 - 不能一起工作?

我有一个奇怪的问题.我有一个以前部署在tomcat中的Java应用程序,并且很高兴地使用logback classic作为slf4j实现.现在,当我们尝试在jboss 7.1.final服务器中部署相同的应用程序时,它甚至没有部署应用程序maoning. java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext 这是令人讨厌的代码行

final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
Run Code Online (Sandbox Code Playgroud)

拥有他的类是弹簧注入而失败 - 因此整个应用程序无法部署.有人有解决方案吗?提前致谢

在查看此站点和其他论坛后,我意识到Jboss 7捆绑了它自己的slf4j实现,并实现LogbackContext在logback中所做的相同ILoggerFactory接口.我们的应用程序尝试获取相同的实例,但应用服务器强加了它自己的slf4j实现.

我试图修改jboss\modules\org\slf4j\impl\main中的module.xml并将其指向logback jar.

<resources>
    <resource-root path="logback-classic-0.9.28.jar"/>
    <resource-root path="logback-core-0.9.28.jar"/>
</resources>
Run Code Online (Sandbox Code Playgroud)

现在,当我启动应用程序时,我遇到了严重的错误

Exception starting filter WicketFilter: java.lang.ClassCastException: ch.qos.logback.classic.LoggerContext cannot be cast to ch.qos.logback.classic.LoggerContext

我没办法.任何jboss和logback专家都可以提供帮助吗?提前致谢

logback jboss7.x

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

如何配置包的回溯?

是否可以为所有软件包配置logback以记录例如WARN或INFO级别,但是xy?然后单独配置包xy.

configuration logback package

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

在Debug中运行Logback

我最近从log4j切换到logback,我想知道是否有一种简单的方法在调试模式下运行logback,类似于log4j的log4j.debug属性.我需要看看它logback.xml从哪里拿起来.

文档提到使用a StatusPrinter打印出logback的内部状态,但这需要更改代码.

java logging logback

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

无法在logback.xml中使用Spring Property Place

我有一个使用Logback的Spring Boot控制台应用程序.所有属性(对于应用程序以及对于Logback)都被外部化到类路径中的标准application.properties文件中.这些属性在应用程序本身中很好地被选中,但是在logback.xml文件中没有被选中.看起来好像在Spring Boot启动之前处理了logback.xml,因此不会处理EL占位符.

使用FileNamePattern作为示例,在application.properties中,我有这样的事情:

log.filePattern=/%d{yyyy/MM-MMMM/dd-EEEE}
Run Code Online (Sandbox Code Playgroud)

在logback.xml中,我会这样:

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <FileNamePattern>${log.logDirectory}${log.filePattern}.log
    </FileNamePattern>
</rollingPolicy>
Run Code Online (Sandbox Code Playgroud)

运行应用程序时,我会看到以下错误:

ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:25 - 
RuntimeException in Action for tag [rollingPolicy]
java.lang.IllegalStateException: FileNamePattern
[log.logDirectory_IS_UNDEFINEDlog.filePattern_IS_UNDEFINED.log]
does not contain a valid DateToken
Run Code Online (Sandbox Code Playgroud)

类似的代码在其他Spring(而不是Spring Boot)应用程序中运行得很好,所以我很好奇Spring Boot的行为有点不同.

解:

感谢@Gary的回复!很高兴知道Spring EL和Logback变量之间的区别......我原以为是Spring负责为我解析这些变量.我确实有元素,但这让我思考.

我的application.properties文件在jar之外,所以Logback不知道在哪里找到它.通过保持我的春节,相关的属性在我的外部application.properties文件,移动日志相关的属性为application-internal.properties文件(位于里面的罐子),并指向的logback到文件(<property resource="application-internal.properties" />)得到的一切工作正常!

java spring logback spring-boot

34
推荐指数
3
解决办法
3万
查看次数

使用多个配置文件配置回溯

我试图通过springboot下的配置文件拆分我的logback.xml,这是我的方法:

的logback-prod.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:- ${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/file- appender.xml" />

<root level="INFO">
    <appender-ref ref="CONSOLE" />
</root>
</configuration> 
Run Code Online (Sandbox Code Playgroud)

的logback-dev.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />

<root level="DEBUG">
    <appender-ref ref="CONSOLE" />
</root>
Run Code Online (Sandbox Code Playgroud)

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="logback-${spring.profiles.active}.xml"/>

<root level="INFO">
    <appender-ref ref="FILE" />
    <appender-ref ref="CONSOLE" />
</root>
Run Code Online (Sandbox Code Playgroud)

最后使用:

-Dspring.profiles.active=dev
 or
-Dspring.profiles.active=prod
Run Code Online (Sandbox Code Playgroud)

我进入了控制台:

13:01:44,673 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@2:16 - no  applicable action for [configuration], current ElementPath  is [[configuration][configuration]]
13:01:44,674 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@3:81 …
Run Code Online (Sandbox Code Playgroud)

logback spring-boot

34
推荐指数
3
解决办法
4万
查看次数

标签 统计

logback ×10

java ×5

logging ×4

slf4j ×3

spring-boot ×3

log4j ×2

spring ×2

configuration ×1

jboss7.x ×1

package ×1

root ×1