我非常喜欢Logback支持登录数据库.但是,我在使用Logback的变量替换功能时遇到了麻烦,更具体地说,是使用了类路径上的属性文件.
我的参考:http://logback.qos.ch/manual/configuration.html#variableSubstitution
所以我有一个多模块Maven项目.在我的web模块(生成.war文件)中,我在以下目录中有我的Logback conf文件:
src/main/reesources
- logback.xml
- local.properties
- dev.properties
Run Code Online (Sandbox Code Playgroud)
我的logback.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property file="${env}.properties"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%X{messageId}] %-5level %logger{0} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>${logback.db.driverClassName}</driverClass>
<jdbcUrl>${logback.db.url}</jdbcUrl>
<user>${logback.db.user}</user>
<password>${logback.db.password}</password>
</dataSource>
</connectionSource>
</appender>
<root level="debug">
<appender-ref ref="DB" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
所以当我调出Tomcat服务器时,我会像这样传递$ {env}:
-Denv=local
Run Code Online (Sandbox Code Playgroud)
但是,当我启动服务器时出现以下错误:
17:45:22,782 WARN com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0 DriverManagerDataSource:107 - Could not load driverClass logback.db.driverClassName_IS_UNDEFINED
java.lang.ClassNotFoundException: logback.db.driverClassName_IS_UNDEFINED
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
Run Code Online (Sandbox Code Playgroud)
看起来Logback Joran无法找到属性文件.
任何人都可以让我知道我做错了什么?
我有以下logback.xml配置:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logFile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %highlight(%-5level) %cyan(%logger{35}) - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
如果我在eclipse(juno)中编辑配置文件,我会收到以下错误:
11:02:54,114 INFO [main] Main - javax.xml.transform.TransformerFactory=null
11:02:54,115 INFO [main] Main - java.endorsed.dirs=C:\Program Files\Java\jre7\lib\endorsed
11:02:54,117 …Run Code Online (Sandbox Code Playgroud) 我有一个在Windows上运行的spring-boot应用程序.我在我的项目中添加了jansi(v1.8)依赖项,用于在Windows上启用彩色终端输出.
包含了spring-boot中提供的logback配置,即在logback.xml中添加了以下行.
<include resource="org/springframework/boot/logging/logback/base.xml" />
Run Code Online (Sandbox Code Playgroud)
我不清楚在logback.xml中配置什么,以便它的日志语句按照spring-boot提供的base.xml进行着色.对不起,如果是一个非常愚蠢的问题,我是一个新手回归.
谢谢 !
运行单元测试时,我想在记录ERROR级别消息的任何测试中失败.使用SLF4J/Logback实现此目的的最简单方法是什么?我想避免编写自己的ILoggerFactory实现.
我尝试编写自定义Appender,但我不能通过调用Appender的代码传播异常,Appender的所有异常都会被捕获.
从spring-boot 1.3.2升级到最近发布的1.3.3时,我们遇到了一个问题.
我们的应用程序一直在使用以下依赖项,每个依赖项都是最新的,没有问题:
<neo4j.version>2.3.2</neo4j.version>
<sdn.version>4.0.0.RELEASE</sdn.version>
<sdn.rest.version>3.4.0.RELEASE</sdn.rest.version>
<neo4j.ogm.version>1.1.5</neo4j.ogm.version>
Run Code Online (Sandbox Code Playgroud)
今天我升级了我们的spring-boot和基于Spring Data Neo4j的应用程序,该应用程序通过更改pom.xml从以下内容启动并与spring-boot 1.3.2.RELEASE一起运行良好:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.2.RELEASE</version>
</parent>
Run Code Online (Sandbox Code Playgroud)
至
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
Run Code Online (Sandbox Code Playgroud)
由于这实际上是唯一的变化,应用程序现在无法启动以下错误:
...
Failed to instantiate [ch.qos.logback.classic.LoggerContext]
Reported exception:
java.lang.AbstractMethodError: ch.qos.logback.classic.pattern.EnsureExceptionHandling.process(Lch/qos/logback/core/pattern/Converter;)V
at ch.qos.logback.core.pattern.PatternLayoutBase.start(PatternLayoutBase.java:88)
at ch.qos.logback.classic.encoder.PatternLayoutEncoder.start(PatternLayoutEncoder.java:28)
at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:167)
at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:317)
at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:196)
at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:182)
at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:149)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:135)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:99)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:49)
at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:77)
at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:152)
at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:143)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:122)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:378)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:328)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:349)
at com.mycompany.Application.<clinit>(Application.java:35)
Run Code Online (Sandbox Code Playgroud)
正如所料,返回1.3.2.RELEASE不会导致任何问题.
到目前为止搜索显示没有可追踪的踪迹.比较mvn dependency:tree使用spring-boot 1.3.2.RELEASE和1.3.3.RELEASE之间的输出,我可以看到ch.qos.logback:logback-classic和ch.qos.logback:logback-access …
在我的带有"@ Slf4j"注释类的Spring启动项目中,对于某些类,我想要记录到不同的文件.但无法弄清楚如何做到这一点.我有一个logback-spring.xml文件,它从我的属性文件中引用,如下所示:
logging.config= path/to/logback-spring.xml
logging.file=myCurrentLogFile.log
Run Code Online (Sandbox Code Playgroud)
我现在必须创建另一个logback-spring.xml文件吗?或者我可以在当前文件中配置它,如果那样,我该如何选择使用哪个记录器.
在我的Spring + Hibernate项目中,我使用LogBack通过SLF4J 1.6.4进行日志记录.现在,我添加了Ehcache 2.2.0(通过ehcache-spring-annotations-1.1.3).缓存似乎是作为方法工作,使用@Cacheable注释,不再执行,但返回正确的结果.但是,我有兴趣看到Ehcache写的日志.由于Ehcache也使用SLF4J,我想,日志应该写入我的日志文件中.但是,这种情况并没有发生.logback.xml具有以下内容.
<root level="info">
<appender-ref ref="STDOUT"/>
<appender-ref ref="ROLLING"/>
</root>
Run Code Online (Sandbox Code Playgroud)
添加以下内容也无济于事
<logger name="net.sf.ehcache">
</logger>
Run Code Online (Sandbox Code Playgroud)
ehcache.xml中
<cache name="sampleCache1"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
/>
Run Code Online (Sandbox Code Playgroud)
请告诉我克服这个问题.
Ehcache正在使用SLF4J 1.6.1,而我的项目正在使用SLF4J 1.6.4.它会引起任何问题吗?
谢谢
我正在使用Logback进行日志记录.Scribe appender将日志实时发送到中央Scribe聚合器.但我不知道如何在日志中为每个日志事件添加源机器IP.查看聚合的中央Scribe日志,几乎不可能知道哪台计算机正在发送日志.因此,将源计算机的IP附加到每个日志事件将会很有帮助,如果我们可以通过logback配置来控制它,那将非常好.
每次应用程序运行时如何创建新的日志文件?
我想以任何方式保留以前的日志.例如,我更愿意按创建时间和日期命名每个新日志文件.否则,我同意将旧日志文件备份到日期和时间文件名中.
不幸的是,我在这里看不到合适的政策和/或触发器:http://logback.qos.ch/manual/appenders.html
UPDATE
我做了大约如"复制"中说的那样
<appender name="ROUTINEAPPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/routine.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/routine%d{yyyyMMdd}%d{HHmmss,aux}.log</fileNamePattern>
<TimeBasedFileNamingAndTriggeringPolicy class="com.inthemoon.toolkit.StartupTimeBasedTriggeringPolicy" />
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} - %C{0} - %msg%n</pattern>
</encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)
但我的班级com.inthemoon.toolkit.StartupTimeBasedTriggeringPolicy从未被召唤过.我把断点放在start()方法中,但它从未提出过.
此外,不会发生滚动.日志文件已创建,但始终具有名称routine.log.
此外,我不明白,如何参数file和filenamePattern应该共存.
更新2
我有固定的UPDATE 1类参考,但仍然没有我需要的.在给定的解决方案中,日期时间将插入OLD日志文件名中.例如,如果我在2013年运行程序,它就会创建routine.log.然后我等了一年,并在2014年运行程序.将创建新的日志文件并具有名称routine.log,而OLD 2013日志将被放入routine2014XXXXXXXXXX.log,这是绝对无关紧要的.
我需要在每次程序启动时创建新文件,并将此文件标记为日期时间戳.
我编写了一个用于回退的Appender并将日志保存到ElasticSearch中,然后将此appender添加到logback.xml.我将它应用到一个应用程序中,我从ES获取日志.
但是当我将它应用到另一个应用程序时,logback显示以下错误:
16:18:26,040 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [com.dcf.iqunxing.fx.dashcam.agent.log.appender.logback.DashcamAppender]
16:18:26,062 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [dashcamAppender]
16:18:26,078 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@110:12 - no applicable action for [encoder], current ElementPath is [[configuration][appender][encoder]]
16:18:26,080 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@111:13 - no applicable action for [Pattern], current ElementPath is [[configuration][appender][encoder][Pattern]]
Run Code Online (Sandbox Code Playgroud)
我的logback.xml是:
...
<appender name="dashcamAppender"
class="com.dcf.iqunxing.fx.dashcam.agent.log.appender.logback.DashcamAppender">
<encoder>
<Pattern>.%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>TRACE</level>
</filter>
</appender>
...
Run Code Online (Sandbox Code Playgroud)
丢失一些动作(或如何添加它们)进行回溯?