我知道我可以像这样设置logback.xmlpath: 指定默认configuration文件的位置作为系统属性 您可以使用名为“logback.configurationFile”的系统属性指定默认configuration文件的位置。 此属性的值可以是URL,类path上的资源或应用程序外部文件的path。 java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1 但我怎么能在代码中做到这一点?
我怎样才能configurationLogback的所有输出到控制台(标准输出)? 特别是,我想抑制(或redirect)Logback自己的日志消息,如下所示: 16:50:25,814 |-INFO in ch.qos.logback.classic.LoggerContext[default] – Could NOT find resource [logback-test.xml] 16:50:25,814 |-INFO in ch.qos.logback.classic.LoggerContext[default] – Found resource [logback.xml] at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] 16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] – Resource [logback.xml] occurs multiple times on the classpath. 16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] – Resource [logback.xml] occurs at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] 16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] – Resource [logback.xml] occurs at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] […]
第一次在阅读时听到标记: http://slf4j.org/faq.html 我检查logging器对象的可用方法: 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 并find接口: 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中使用标记的最佳实践 更新看来,当你使用标记,你也需要编写自定义的Java代码,而不是在XML或.property文件中进行configuration… 更新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"));
我已经经历了所有logback的文档 ,并且在日志logging时找不到任何文档来configuration编码器的模式,例如: <encoder> <pattern>%d{HH:mm:ss.SSS} %-4relative %-5level %logger{35} – %msg%n</pattern> </encoder> 我想要一个表(就像log4j所提供的)解释不同的选项来configuration模式。 模式的文档在哪里? 也许他们在另一个项目中定义?
在我们的软件中,我们广泛使用MDC来跟踪networking请求的会话ID和用户名等内容。 这在原始线程中运行正常。 但是,有很多事情需要在后台处理。 为此,我们使用java.concurrent.ThreadPoolExecutor和java.util.Timer类以及一些自卷asynchronous执行服务。 所有这些服务pipe理他们自己的线程池。 这就是Logback的手册在这样的环境中使用MDC的说法: 映射的诊断上下文的副本不能始终由启动线程的工作线程inheritance。 当java.util.concurrent.Executors用于线程pipe理时就是这种情况。 例如,newCachedThreadPool方法创build一个ThreadPoolExecutor并像其他线程池代码一样,它具有复杂的线程创build逻辑。 在这种情况下,build议在向执行程序提交任务之前,在原始(主)线程上调用MDC.getCopyOfContextMap()。 当任务运行时,作为其第一个操作,它应调用MDC.setContextMapValues()将原始MDC值的存储副本与新的Executorpipe理线程相关联。 这样可以,但是忘记添加这些电话是很容易的,而且要等到为时已晚,还没有简单的方法来识别问题。 Log4j的唯一标志就是在日志中丢失了MDC信息,而在Logback中,您会得到陈旧的MDC信息(因为在步骤池中的线程从在其上运行的第一个任务inheritance其MDC)。 两者都是生产系统中的严重问题。 我没有看到我们的情况有任何特殊之处,但我在网上找不到这个问题。 显然,这不是很多人碰到的事情,所以一定要有办法避免。 我们在这里做错了什么?
这似乎是一个粗心的错误,但我似乎无法find原因。 使用logback / slf4j(最新版本slf4j-api-1.6.1,logback core / classic 0.9.24)进行日志logging。 最简单的testing日志configuration是: <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] […]
我曾经在网上看过几次关于如何使用XML模式或DTD for logback.xml文件在IDE(如IDEA或Eclipse)中至less具有非常基本的validation和自动完成function的讨论,但是我从未见过任何解决scheme 你是否?
我们在项目中使用SLF4J + Logback组合已经有一段时间了,对此我们感到非常满意,但是我们的日志策略相当简单,使用了基于类的直接logging器,并且没有像MDC或Markers这样的花哨的东西。 我想知道的是社区中的任何人实际上是否使用这些function以及如何使用这些function来改进日志logging/过滤。 我特别感兴趣的是在哪里,为什么以及如何使用[1]标记进行采伐。 他们认为我是一个很好的将日志语境添加到日志中的function – 例如,当一个类可能处理多个问题时,可以使用任务/关注特定标记来区分日志语句。 什么是在日志中创build和使用标记的最佳实践,约定或策略。 更新:我想,我真正追求的不是为什么要使用标记,而是如何使用标记 – 是否有一些命名标记的良好实践(例如,使用带空格或短划线/下划线/标点分隔的关键字样式名称的纯文本),是否应该有一些“标准名称”,根据业务function命名的东西。 我可能为自己弄清楚的问题,但是如果我想系统地使用这些function,并将它们引入开发团队,那么有一些正式的指导方针是有道理的。 [1] – 通过询问如何使用标记,我并不真正问如何使用API(这实际上是非常简单的) – 我更倾向于指出如何使用标记一致地logging日志
我正在构build一个小的Java应用程序,并希望使用logback进行日志logging。 我的应用程序依赖于一个较老的项目,通过它进行日志logging org.apache.commons | com.springsource.org.apache.commons.logging | 1.1.1 …所以我的计划是使用 org.slf4j | jcl-over-slf4j | 1.5.6 …将JCL日志redirect到 org.slf4j | slf4j-api | 1.6.0 最终… ch.qos.logback | logback-classic | 0.9.22 ch.qos.logback | logback-core | 0.9.22 所以我的应用程序可以通过它的slf4j APIloginlogback,而旧的库代码可以通过redirectlogin到同一个位置。 唉,这个结果 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) 我已经尝试了更高和更低的一些这些瓶子的verision号码,也挖通过API文档等…但我无法find并解决问题。 请帮助? 尽pipelogback被认为是“战略性”的日志框架,但是我最终还是会使用日志机制。 我希望可以使用logback或log4j,但是我确实希望通过一个通用的configuration将旧的项目的日志logging合并到“新”日志框架中。
为什么会使用下列其中一个软件包而不是另一个? Javalogging Commons Logging Log4j的 SLF4J 的logback