为啥 Slf4j/Logback 不记录文件名和行号

     2023-03-05     155

关键词:

【中文标题】为啥 Slf4j/Logback 不记录文件名和行号【英文标题】:Why doesn't Slf4j/Logback log filename and row number为什么 Slf4j/Logback 不记录文件名和行号 【发布时间】:2015-04-20 14:20:23 【问题描述】:

我的日志记录有问题,slf4j 没有记录消息/堆栈跟踪的文件名和行号。

代码:

private static Logger log = LoggerFactory.getLogger(SomeService.class);

@Override
public void aService(ServiceAdmin sa) throws Exception 
    log.debug(LoggerFactory.class.toString());
    log.debug(log.getClass().getName());
    log.debug("Setup Example");
    SomeService.setDefault(Example.getInstance());
    log.debug("Example finished");

日志:

2015-04-20 14:47:26.573 DEBUG [main] null:-1 - class org.slf4j.LoggerFactory
2015-04-20 14:47:26.574 DEBUG [main] null:-1 - ch.qos.logback.classic.Logger
2015-04-20 14:47:26.574 DEBUG [main] null:-1 - Setup Example
2015-04-20 14:47:26.575 DEBUG [main] null:-1 - SomeService finished

这是我的 logback.xml 中与此类相关的部分

    <logger name="com.bredband.nexusgw.services">
            <level value="debug" />
            <appender-ref ref="nexusservice" />
    </logger>

    <appender name="nexusservice"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <File>/var/log/nexus/nexusjgw/jgw/Service.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <FileNamePattern>/var/log/nexus/nexusjgw/jgw/Service.log.%i
                    </FileNamePattern>
                    <MinIndex>1</MinIndex>
                    <MaxIndex>5</MaxIndex>
            </rollingPolicy>
            <triggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <MaxFileSize>200MB</MaxFileSize>
            </triggeringPolicy>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                    <level>debug</level>
            </filter>
            <layout class="ch.qos.logback.classic.PatternLayout">
                    <Pattern>%dyyyy-MM-dd HH:mm:ss.SSS %5p [%t] %F:%L - %m%n</Pattern>
            </layout>
    </appender>

有没有人见过这个并且可以指出正确的方向?

BR 斯蒂芬

-- 更新--

我将 %F 更改为 %C,但这并没有改变日志中的任何内容。然后我尝试在我的 ant 文件的 javac 标头中设置 debug = "on",现在它正在记录类名和行号。

2015-04-21 08:28:55.910 DEBUG [main] Service.java:20 - class     org.slf4j.LoggerFactory
2015-04-21 08:28:55.911 DEBUG [main] Service.java:21 - ch.qos.logback.classic.Logger
2015-04-21 08:28:55.911 DEBUG [main] Service.java:22 - Setup Example
2015-04-21 08:28:55.912 DEBUG [main] Service.java:24 - Example finished

虽然这行得通,但这不是我以前改变过的东西。随着时间的推移,该项目中唯一发生变化的是添加了其他外部 jar。我不太确定在另一个外部 jar 中添加重复/新/旧版本的 slf4j 会如何影响日志记录,但是任何版本都应该查找 logback 文件?

-- 更新-- 在检查了很多 build.xml 文件的历史签入后,我发现我们实际上之前有 debug = "on" 并且问题实际上可能是由这个参数设置为 "off" 引起的。

感谢您的帮助。

BR 斯蒂芬

【问题讨论】:

如何提供重要信息...例如您的 logback 配置? 你在 logback 配置文件中放了什么? 乍一看没有什么明显的错误。您最近是否对应用程序的交付/打包/部署方式进行了任何更改? 【参考方案1】:

您应该首先确保使用调试信息编译您的应用程序。如果直接调用javac,则为-g命令行参数。然而,大多数构建工具(如 maven 或 ant)都有特定的方式来提供此参数。

您可能还想将%F 替换为%C,这样在没有调试信息的情况下应该可以工作。

【讨论】:

这解决了问题,但我想调试不应该是“on”才能工作,我们之前在 ant 中没有 debug =“on”。 您只需要使用调试标志进行编译,您不需要在调试模式下运行应用程序。另见***.com/questions/218033/…

slf4j+logback实现日志输出和记录(代码片段)

一、SLF4J   SLF4J,即简单日志门面(SimpleLoggingFacadeforJava),不是具体的日志解决方案,它只服务于各种各样的日志系统。在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。   使用... 查看详情

踩坑记——使用slf4j+logback记录日志

 jar包版本:<spring.version>3.1.0.RELEASE</spring.version><slf4j.version>1.7.25</slf4j.version><logback.version>1.2.3</logback.version><logback.ext.version>0 查看详情

java#在项目中使用slf4j+logback来记录日志

1.简介1.1SLF4J概述SLF4J代表SimpleLoggingFacadeforJava。相当于一个门面,提供了Java中所有日志框架的简单抽象。使用SLF4J框架,可以在部署时,迁移到所需的日志记录框架(如Log4j,JUL,Simplelogging,NOP等)SLF4J... 查看详情

如何使 Logback 记录一个空行,而不包括模式字符串?

】如何使Logback记录一个空行,而不包括模式字符串?【英文标题】:HowtomakeLogbacklogablankline,withoutincludingthepatternstring?【发布时间】:2013-08-2519:22:13【问题描述】:我有一个设置为使用SLF4J/Logback的Java应用程序。我似乎找不到一种... 查看详情

在 SLF4J/Logback 中使用标记的最佳实践

】在SLF4J/Logback中使用标记的最佳实践【英文标题】:BestpracticesforusingMarkersinSLF4J/Logback【发布时间】:2011-05-0902:39:14【问题描述】:我们在项目中使用SLF4J+Logback组合已有一段时间了,对此非常满意,但我们的日志记录策略相当简... 查看详情

java#在项目中使用slf4j+logback来记录日志(代码片段)

...ACE有关系统流程的更多详细信息SLF4J和Log4j的关系:1.2Logback概述Logback分为三个不同的模块,logback-core(核心代码模块),logback-classic(log4j的一个改良版本,同时实现了slf4j的接口,这样如果之后要... 查看详情

logback最佳实践

参考技术ALogback是由log4j创始人设计的一个开源日志组件。LogBack被分为3个组件,logback-core,logback-classic和logback-access。Logback是要与SLF4J结合起来。这两个组件的官方网站如下:logback官方网站:logback官方网站SLF4J官方网站:SLF4J官方... 查看详情

springboot2.x整合slf4j+logback日志框架(代码片段)

目录1、Slf4j及Logback简介2、日志级别3、maven依赖3.1springboot2maven配置文件3.2普通maven项目的配置文件4、logback、springboot配置说明4.1 logback.xml 和logback-spring.xml的区别4.2logback.xml配置文件的加载机制4.3SpringBoot结合logback配置说明4.3.1logb... 查看详情

springboot2.x整合slf4j+logback日志框架(代码片段)

目录1、Slf4j及Logback简介2、日志级别3、maven依赖3.1springboot2maven配置文件3.2普通maven项目的配置文件4、logback、springboot配置说明4.1 logback.xml 和logback-spring.xml的区别4.2logback.xml配置文件的加载机制4.3SpringBoot结合logback配置说明4.3.1logb... 查看详情

slf4j+logback搭建超实用的日志管理模块

文章转自http://www.2cto.com/kf/201702/536097.htmlslf4j+logback搭建超实用的日志管理模块(对日志有编号管理):日志功能在服务器端再常见不过了,我们非常有必要记录下发生在服务器上的活动,这些日志将用于debug、统计等各种用途。s... 查看详情

项目存在多个logback配置

以下两个是我在使用slf4j+logback时候日志提示的问题,问题不大,都是WARN,并不真正影响运行,但是结果可能不是你希望的结果。<1>SLF4J:Foundbindingin[jar:file:/servers/storm-0.9.0.1/lib/logback-classic-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.cla... 查看详情

logback的使用和logback.xml详解(代码片段)

一、logback的介绍Logback是由log4j创始人设计的另一个开源日志组件,官方网站:http://logback.qos.ch。它当前分为下面下个模块:logback-core:其它两个模块的基础模块logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4jAPI使你... 查看详情

开发经验springboot日志slf4j+logback日志模块化(代码片段)

文章目录1、当前类的日志单独保存在一个文件中2、特定的日志在特定的文件中3.按照模块打印总结        如果你看到我这个文章,想必肯定是受到了生产环境查日志的折磨了吧。在生产环境中没有ELK这种日志查询工具... 查看详情

[slf4j+log]源码解析(代码片段)

...列的日志接口,使用户可以使用统一的接口来记录日志。logback,log4j等框架都实现了这些接口,启动时动态地决定真正的日志框架。本文以slf4j+logback的源码来讲解整个绑定和打印日志的流程。手动阅读目录如下:绑定日志框架解... 查看详情

无法弄清楚为啥我的字符、字数和行数适用于文件输入,但不适用于标准输入

】无法弄清楚为啥我的字符、字数和行数适用于文件输入,但不适用于标准输入【英文标题】:Cantfigureoutwhymycharacter,wordandlinecountwillworkwithfileinputbutnotfromstdin无法弄清楚为什么我的字符、字数和行数适用于文件输入,但不适用于... 查看详情

为啥 GitHub 在提交历史记录时不显示文件历史记录?

】为啥GitHub在提交历史记录时不显示文件历史记录?【英文标题】:WhyGitHubdoesn\'tdisplaythefilehistorywhenthecommithistorydoes?为什么GitHub在提交历史记录时不显示文件历史记录?【发布时间】:2014-10-0512:03:03【问题描述】:我最近发现了... 查看详情

slf4j+logback使用参考

博文参考:最简例子:https://blog.csdn.net/johnson_moon/article/details/77532583Web中配置:https://blog.csdn.net/kity9420/article/details/81042580配置SpringBoot+级别过滤:https://blog.csdn.net/duguxiaobiao/article/details/ 查看详情

springboot整合slf4j+logback日志框架

一、Slf4j简单介绍与优势1、介绍  Slf4j的全称是SimpleLogingFacadeForJava(Java简单日志门面),它仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已。所以单独的Slf4j... 查看详情