Questions tagged «logback»

与Log4J和java.util.logging相比,基于Java的程序的现代日志记录功能具有许多新功能。

5
为什么不使用java.util.logging?
我有生以来第一次发现自己正在写一个将开源的Java API。希望将其包含在许多其他项目中。 对于日志记录,我(实际上是与我一起工作的人)一直使用JUL(java.util.logging),并且从未遇到过任何问题。但是,现在我需要更详细地了解我应该为API开发做什么。我对此进行了一些研究,并根据所获得的信息感到更加困惑。因此,这个职位。 由于我来自七月,所以我对此有偏见。我对其余的知识并不多。 通过研究,我得出了人们不喜欢JUL的这些原因: “我很早在Sun发布JUL之前就开始使用Java进行开发,对于我而言,继续使用logging-framework-X而不是学习新知识变得更加容易”。嗯 我不是在开玩笑,这实际上是人们所说的。有了这个论点,我们所有人都可以做COBOL。(但是我当然可以认为自己是个懒惰的家伙) “我不喜欢JUL中的日志记录级别的名称”。好的,认真的说,这还不足以引入新的依赖关系。 “我不喜欢JUL输出的标准格式”。嗯 这只是配置。您甚至不必执行任何代码明智的事情。(是的,过去,您可能必须创建自己的Formatter类才能正确使用它)。 “我使用了其他也使用logging-framework-X的库,因此我认为仅使用该库就更容易了”。这是一个循环的论证,不是吗?为什么“每个人”都使用logging-framework-X而不使用JUL? “其他人都在使用logging-framework-X”。对我来说,这只是上述情况的特例。多数并不总是正确的。 因此,真正的大问题是为什么不选择JUL?。我错过了什么?记录正面(SLF4J,JCL)的理由是,历史上已经存在多种记录实现,其原因确实可以追溯到我看到的JUL之前的时代。如果JUL是完美的,那么将不会存在伐木外观,还是什么?使事情更加混乱的是,JUL在某种程度上是一种外观,它允许交换Handlers,Formatters甚至LogManager。 而不是采用多种方式做同一件事(记录),我们是否应该首先质疑为什么必须这样做?(并查看这些原因是否仍然存在) 好的,到目前为止,我的研究已经发现了一些可能是JUL 真正问题的东西: 表现。有人说SLF4J的性能优于其他产品。在我看来,这似乎是过早优化的一种情况。如果您需要每秒记录数百兆字节,那么我不确定您是否走在正确的道路上。JUL也已经发展,您在Java 1.4上进行的测试可能不再正确。您可以在此处阅读有关此内容的信息,此修复程序已将其纳入Java7。许多人还谈到了日志记录方法中字符串连接的开销。但是,基于模板的日志记录避免了这种成本,并且它在JUL中也存在。我个人从来没有真正写过基于模板的日志记录。太懒了。例如,如果我使用JUL执行此操作: log.finest("Lookup request from username=" + username + ", valueX=" + valueX + ", valueY=" + valueY)); 我的IDE会警告我,并请求允许将其更改为: log.log(Level.FINEST, "Lookup request from username={0}, valueX={1}, valueY={2}", new Object[]{username, valueX, valueY}); ..我当然会接受。许可授予 !感谢您的帮助。 因此,我实际上并不是自己编写此类语句,而是由IDE完成的。 总之,在性能问题上,我没有发现任何暗示JUL的性能与竞争对手相比不佳的信息。 …
351 java  logging  slf4j  logback 

5
日志记录级别-Logback-分配日志级别的经验法则
我在当前项目中使用了logback。 它提供了六种日志记录级别:TRACE DEBUG INFO WARN ERROR OFF 我正在寻找确定常规活动日志级别的经验法则。例如,如果线程被锁定,则应将日志消息设置为调试级别还是信息级别。或者,如果正在使用套接字,则应在调试级别或跟踪级别记录其特定ID。 对于每个日志记录级别的更多示例,我将不胜感激。
258 logging  logback 

12
如何配置Logback以将记录器的不同级别记录到不同的目的地?
如何配置Logback以将记录器的不同级别记录到不同的目的地? 例如,给定以下Logback配置,Logback会将INFO消息记录到STDOUT并将ERROR消息记录到STDERR吗? (请注意,此示例是第3章:Logback配置中logback-examples/src/main/java/chapters/configuration/sample4.xml所示示例的变形)。 <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> </appender> <appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> <target>System.err</target> </appender> <!-- What is the effective level of "chapters.configuration"? --> <logger name="chapters.configuration" level="INFO" additivity="false"> <appender-ref ref="STDOUT" /> </logger> …
156 java  logging  logback 

6
log4j vs logback [关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 6年前关闭。 改善这个问题 我们在自制包装器后面使用log4j。我们计划现在使用它的更多功能。 我们应该更新到登录吗? (我的意思是框架不是像SLF4J这样的外观)
152 java  logging  log4j  logback 

3
重新登录以将不同的消息记录到两个文件
我正在使用logback / slf4j进行日志记录。我想解析我的日志文件以分析一些数据,所以我不想解析一个很大的大文件(主要由调试语句组成),而是要有两个记录器实例,每个实例都记录到一个单独的文件中。一种用于分析,另一种用于通用日志记录。有谁知道使用Logback或任何其他记录器可以做到这一点吗?
146 java  logging  logback  slf4j 

8
如何在线程池中使用MDC?
在我们的软件中,我们广泛使用MDC来跟踪Web请求的内容,例如会话ID和用户名。在原始线程中运行时,这可以正常工作。但是,有很多事情需要在后台处理。为此,我们使用java.concurrent.ThreadPoolExecutor和java.util.Timer类以及一些自卷式异步执行服务。所有这些服务都管理自己的线程池。 这是Logback手册关于在这样的环境中使用MDC的内容: 映射的诊断上下文的副本不能始终由工作线程从发起线程继承。当java.util.concurrent.Executors用于线程管理时,就是这种情况。例如,newCachedThreadPool方法创建ThreadPoolExecutor,并且像其他线程池代码一样,它具有复杂的线程创建逻辑。 在这种情况下,建议在将任务提交给执行者之前,在原始(主)线程上调用MDC.getCopyOfContextMap()。当任务运行时,作为第一个动作,它应调用MDC.setContextMapValues()将原始MDC值的存储副本与新的Executor托管线程相关联。 这样做很好,但是忘记添加这些呼叫非常容易,并且直到太晚之前,都没有简便的方法来识别问题。使用Log4j的唯一迹象是您在日志中丢失了MDC信息,而使用Logback则获得了陈旧的MDC信息(因为胎面池中的线程从其上运行的第一个任务继承了其MDC)。两者都是生产系统中的严重问题。 我认为我们的处境没有任何特别之处,但是我在网络上找不到太多有关此问题的信息。显然,这不是很多人反对的事情,因此必须有一种避免的方法。我们在这里做错了什么?
146 java  logging  slf4j  logback  mdc 

10
如何防止在每个日志开始时logback输出自己的状态?
这似乎是一个粗心大意的错误,但我似乎找不到原因。使用logback / slf4j(最新版本slf4j-api-1.6.1,logback核心/经典0.9.24)进行记录。用于测试的最简单的日志配置是: <configuration> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <!-- DONT USE THIS FORMATTER FOR LIVE LOGGING THE %L LINE NUMBER OUTPUTTER IS SLOW --> <pattern>%le %-1r [%c{1}:%L] %m%n</pattern> </layout> </appender> <root level="DEBUG"> <appender-ref ref="stdout" /> </root> </configuration> 每个日志设置都以logback的内部状态行开始: 11:21:27,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 11:21:27,826 …
145 logback 

6
如何以编程方式更改root日志记录级别以进行注销
我有以下logback.xml文件: <configuration debug="true"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration> 现在,在发生特定事件时,我想以编程方式将root记录程序的级别从debug更改为error。我不能使用变量替换,这是强制性的,我必须在代码中执行此操作。 如何做呢 ?谢谢。
144 java  logging  logback 

4
在SLF4J / Logback中使用标记的最佳实践
我们在项目中使用SLF4J + Logback组合已经有一段时间了,对此感到很满意,但是我们的日志记录策略非常简单,使用基于类的简单记录器,没有像MDC或Markers这样的奇特的东西。 我想知道的是,社区中是否有人真的使用了这些功能,以及它们如何用于改善日志记录/过滤功能。 我对在哪里,为什么以及如何使用[1]标记进行记录特别感兴趣。它们使我感到惊奇,因为它是将语义上下文添加到日志记录中的一种非常简洁的功能-例如,当一类可能正在处理多个问题时,可以使用特定于任务/关注点的标记来区分日志语句。 在日志记录中创建和使用标记的最佳实践,惯例或策略可能是什么。 更新:我想,我所真正追求的是没有那么多,为什么要使用标记,而是如何的一部分-有命名标志的一些好的做法(例如,使用用空格或破折号/下划线/标点符号分隔的关键字样式名称纯文本),如果有某种“标准名称”池,则根据业务功能命名内容。我可能可以为自己解决一些问题,但是如果我想系统地使用这些功能并将其介绍给一组开发人员,则有一套可形式化的指导原则是有道理的... [1] -通过询问如何使用标记,我并不是在问如何使用API​​(这确实很简单)-我指的是更一般的水平,即如何设置一致地使用标记进行日志记录
127 java  logging  slf4j  logback  markers 

8
用Java登录怎么办?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 为什么一个将使用以下软件包之一而不是另一个? Java记录 共用记录 Log4j SLF4j 退回
117 java  logging  log4j  logback  slf4j 

10
SLF4J:无法加载类“ org.slf4j.impl.StaticLoggerBinder”。错误
关于Eclipse IDE(Indigo,Juno和Kepler(32和64位版本)) 平台:Windows,Ubuntu,Mac M2E版本:1.1.0.20120530-0009,1.2.0.20120903-1050,1.3.0.20130129-0926, 1.4.0.20130601-0317 基本信息 将m2e更新到1.1版后,发生了上述错误。通过删除m2e 1.1并回滚到m2e 1.0,一切正常。我试图在Windows和Ubuntu中重复该问题,但它给了我完全相同的错误。测试了slf4j-api和logback的许多配置,但似乎没有任何效果。 即使未声明slf4j依赖关系,该错误也会出现在任何Maven项目中。 新的Maven项目-> maven-archetype-quickstart 和 New Maven Project->没有原型选择的简单项目 结果到 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 测试环境和配置 已在Mac上使用Eclipse Indigo和Eclipse Juno(分别为32位和64位),在Ubuntu上为32位以及在Windows上为64位和32位进行了测试。测试了Juno Classic,Juno建模工具,Kepler Standard,Kepler建模工具的新安装,并且产生了相同的错误。 错误显示为clean,install,test,deploy,generate-sources,validate,compile,package,integration-test,verify以及目标clean和其余目标的组合。它也与-e和-X参数一起出现。试图删除m2e存储库并从头下载它,但再次失败。我应该提到的是,在上述所有系统的3个不同机器和虚拟盒中对其进行了测试,但产生了相同的错误。 尝试解决slf4j-api和logback-core依赖性的所有不同的logback配置(从1.0.4到1.0.13),但是都产生相同的错误: <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version></version> </dependency> 尝试了所有不同的(从1.6.1到1.7.5)slf4j-simple配置。 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version></version> <scope>compile</scope> </dependency> 尝试了所有不同的配置(从1.6.1到1.7.5)log4j-over-slf4j。 <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version></version> <scope>compile</scope> </dependency> …

1
Java Logging框架中的标记是什么?使用它们的原因是什么?
第一次阅读时我听说标记: http://slf4j.org/faq.html 我检查Logger对象的可用方法: http://www.slf4j.org/api/org/slf4j/Logger.html http://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Logger.html 并找到接口: http://www.slf4j.org/api/org/slf4j/Marker.html http://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Marker.html 我可以从以下获得更深入的信息: http://logback.qos.ch/manual/filters.html 但是仍然很困惑...请注意,我问为什么,而不是如何使用它们,所以这不是重复的: 在SLF4J / Logback中使用标记的最佳实践 UPDATE似乎当您使用标记时,您还需要编写自定义Java代码,而不是在XML或.property文件中进行配置... 更新2来自http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN"); logger.error(notifyAdmin, "This is a serious an error requiring the admin's attention", new Exception("Just testing"));
110 java  logging  log4j  slf4j  logback 

3
记录框架不兼容
我正在构建一个小型Java应用程序,并希望使用logback进行日志记录。 我的应用程序依赖于一个较旧的项目,该项目通过 org.apache.commons | com.springsource.org.apache.commons.logging | 1.1.1 ...所以我的计划是使用 org.slf4j | jcl-over-slf4j | 1.5.6 ...将JCL日志记录重定向到 org.slf4j | slf4j-api | 1.6.0 ...最终 ch.qos.logback | logback-classic | 0.9.22 ch.qos.logback | logback-core | 0.9.22 因此我的应用可以通过其slf4j API通过logback登录,而旧的库代码可以通过重定向登录到同一位置。 ,这导致 java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V at org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:141) 我已经尝试过在其中一些罐子中使用更高或更低的版本号,并且还通过API文档等进行了挖掘...但是我无法找到并解决问题。 请帮助? 尽管logback被认为是“战略”日志记录框架,但是我在最终使用哪种日志记录机制方面还有一些余地。不过,我希望使用logback或log4j,并且我绝对希望通过通用配置将旧项目的日志记录合并到最终成为“新”日志记录框架的内容中。

6
是XML模式还是logback.xml的DTD?
我已经在网上看到了一些讨论,其中有一个logback.xml文件具有XML模式或DTD至少对IDEA或Eclipse这样的IDE具有最基本的验证和自动完成功能有多大的作用,但我从未见过任何解决方案。 你是否?
108 java  xsd  logback  dtd  xml 

1
Logback编码器模式文档在哪里
我已经遍历了所有的logback 文档,并且在任何地方都找不到文档来配置编码器的模式,例如: <encoder> <pattern>%d{HH:mm:ss.SSS} %-4relative %-5level %logger{35} - %msg%n</pattern> </encoder> 我想要一张表(就像log4j的表一样)来解释配置模式的不同选项。 模式的文档在哪里?也许它们是在另一个项目中定义的?
93 java  logging  log4j  logback 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.