好吧,项目中一直使用的是logback做日志记录。

开始跑Demo的时候,一直会报Failed to load class org.slf4j.impl.StaticLogger的错误。后来google下,发现是这个原因:

This error is reported when the org.slf4j.impl.StaticLoggerBinder class could not be loaded into memory. This happens when no appropriate SLF4J binding could be found on the class path. Placing one (and only one) of slf4j-nop.jar , slf4j-simple.jar , slf4j-log4j12.jar , slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem.

原来我只导了slf4j-ai-1.7.2.jar,logback-core-1.0.7.jar,后来加上logback-classic-1.0.7.jar,就不报错了。

具体的配置呢,参考这个blog就好了呢。http://aub.iteye.com/blog/1101260 根据blog去做配置的时候,又发现了一个问题。

就是logback.xml里面的配置文件一直木有生效哈。

先借用刚才那个blog里面的demo吧

java code

 package demo;

 import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter; public class LogbackDemo {
private static Logger log = LoggerFactory.getLogger(LogbackDemo.class); public static void main(String[] args) {
log.trace("====trace");
log.debug("====debug");
log.info("====info");
log.warn("====warn");
log.error("====error");
// String URL = "logback.xml";
// System.out.println(ClassLoader.getSystemResource(URL));
// LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
// // print logback's internal status
// StatusPrinter.print(lc);
}
}

logback.xml

 <configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>./testFile.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} -%msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>

明明我的logback.xml的文件中配置的是将log打印到文件中,实际运行的时候,却一直在控制台打印下面的信息。

output in console

 17:15:38.444 [main] DEBUG demo.LogbackDemo - ====debug
17:15:38.448 [main] INFO demo.LogbackDemo - ====info
17:15:38.448 [main] WARN demo.LogbackDemo - ====warn
17:15:38.448 [main] ERROR demo.LogbackDemo - ====error

奇怪吧。之前是把logback.xml放在conf这个文件夹下面的,后来把logback.xml直接放在src下就可以了。知道原因了吧,logback的运行机制是默认去classpath下面去找配置文件,是怎样去查找的呢?

1.Logback 尝试在classpath中(in the classpath)寻找一个名为 logback.groovy  的文件。
2.如果没有找到该文件, logback 尝试在classpath中(in the classpath)寻找一个名为 logback-test.xml 的文件。
3.如果没有找到该文件,尝试在classpath中(in the classpath)寻找一个名为 logback.xml 的文件。
4.如果没有找到任何一个文件,logback 自己自动使用 BasicConfigurator 配置,它使 logging output 被定向到 console

由于,demo中我并没有配置logback.groovy,logback-test.xml,而logback.xml文件又被我放到了conf文件夹下,所以,也没有找到,最后,logback只好将日志以默认的配置输出了。

默认配置

 <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>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -
%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>

所以,上面的output是不是可以理解了呢。

好吧,把logback.xml放在了conf文件夹下后,怎么让logback找到它呢?刚才说了,logback的运行机制是默认去classpath下面去找配置文件,所以,把文件夹conf加入到classpath中就好了。在eclipse的java build path中,找到source,add folder就好了。再重新跑demo的话就一切OK了。

有时,为了更好的维护代码,增加灵活性,需要把logback.xml的一些配置项的值写在另一个配置文件中,一般是properties文件哈。

config.properties

 LOG_LEVEL=DEBUG
APP_USER_HOME=./

相应的logaback.xml

 <configuration scan="true" debug="true">
<property resource="conf.properties" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${APP_USER_HOME}/testFile.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} -%msg%n</pattern>
</encoder>
</appender>
<root level="${LOG_LEVEL}">
<appender-ref ref="FILE" />
</root>
</configuration>

这样在src下面就会产生一个日志文件testFile.log;

同时,将configuration的属性debug设置为"true"时,这样允许访问logback内部的运行状态,这时候将会在控制台打印下面的信息

 17:38:27,562 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
17:38:27,562 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
17:38:27,562 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/D:/workspace/LogbackDemo/bin/logback.xml]
17:38:27,626 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[D:\workspace\LogbackDemo\bin\logback.xml]] every 60 seconds.
17:38:27,626 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
17:38:27,639 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.FileAppender]
17:38:27,641 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE]
17:38:27,650 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:38:27,675 |-INFO in ch.qos.logback.core.FileAppender[FILE] - File property is set to [.//testFile.log]
17:38:27,676 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
17:38:27,676 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [FILE] to Logger[ROOT]
17:38:27,677 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
17:38:27,678 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@13c468a - Registering current configuration as safe fallback point

当然,logback中还有很多别的设置,最最详细的看下面这两篇blog最好了。

一个是之前提到的那个blog做基础入门:http://aub.iteye.com/blog/1101260

还有一篇blog做深入了解:http://www.yulezhandian.com/?p=324

logback配置的更多相关文章

  1. logback 配置

    logback 配置 logback的配置方式包括:编程配置.XML文件配置.Groovy文件配置.对于使用log4j的用户,还可以通过logback提供的工具( http://logback.qos ...

  2. 剖析项目多个logback配置(下)

    来源:http://www.cnblogs.com/guozp/p/5973038.html 上篇大概描述了logback的加载顺序以及加载的源码,本篇将分析如果在你的Maven或者其他多模块的项目中 ...

  3. Spring Boot系列一:默认日志logback配置解析

    前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...

  4. (网页)Java日志记录框架Logback配置详解(企业级应用解决方案)(转)

    转自CSDN: 前言 Logback是现在比较流行的一个日志记录框架,它的配置比较简单学习成本相对较低,所以刚刚接触该框架的朋友不要畏惧,多花点耐心很快就能灵活应用了.本篇博文不会具体介绍Logbac ...

  5. Java中多环境Logback配置与ELK日志发送

    Java中多环境Logback配置与ELK日志发送   一.项目基于SpringBoot实现,引入SpringBoot相关库后,本文还要讲上传到ELK的Logstash,所以需要在pom.xml中加入 ...

  6. logback配置详解

    本文转自:https://segmentfault.com/a/1190000008315137 概览 简单地说,Logback 是一个 Java 领域的日志框架.它被认为是 Log4J 的继承人.L ...

  7. SpringBoot Logback配置,SpringBoot日志配置

    SpringBoot Logback配置,SpringBoot日志配置  SpringBoot springProfile属性配置 ================================ © ...

  8. spring整合mybatis、hibernate、logback配置

    Spring整合配置Mybatis 1.配置数据源(连接数据库最基本的属性配置,如数据库url,账号,密码,和数据库驱动等最基本参数配置) <!-- 导入properties配置文件 --> ...

  9. logback -- 配置详解 -- 四 -- <filter>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  10. logback -- 配置详解 -- 三 -- <encoder>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

随机推荐

  1. for in 的各种坑

    for in方法用来遍历数组或者对象的显性属性,就是说我们自己定义的属性都是可以遍历的,而对象固有的属性,比如Object.prototype.toString是遍历不出来的. for in方法简洁好 ...

  2. phpmyadmin配置方式

    简单的说,phpmyadmin就是一种mysql的管理工具,安装该工具后,即可以通过web形式直接管理mysql数据,而不需要通过执行系统命令来管理,非常适合对数据库操作命令不熟悉的数据库管理者,下面 ...

  3. HDU1896Stones(优先队列)

    Stones Time Limit : 5000/3000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submis ...

  4. java 线程的中断

    Example12_6.java public class Example12_6 { public static void main(String args[]) { ClassRoom room6 ...

  5. hdu_5179_beautiful number(数位DP)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5179 题意:给你一个范围,问你漂亮的数有多少个,漂亮的数的定义为 数位高的比数位低的大,并且 数位高的 ...

  6. Vsftp配置都没有问题 连接不上 530 Login incorrect 解决方法

    客户端输入正确的用户名和密码之后,却一直显示:530 Login incorrectLogin Failed后来发现在etc下面有个pam.d文件夹进去打开vsftpd这个文件, 发现里面对之前的用户 ...

  7. ssh-copy-id

    建立无密码登录是经现root成功普通用户失败, chmod 0600 authorized_keys setenforce 0 ssh-copy-id  server2 ssh-add   ~/.ss ...

  8. 我也谈javascript闭包的原理理解

    参考原文:http://www.oschina.net/question/28_41112 前言:还是一篇入门文章.Javascript中有几个非常重要的语言特性——对象.原型继承.闭包.其中闭包 对 ...

  9. 排座椅(seat)

    排座椅(seat) 题目描述 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课 ...

  10. C语言实现按位循环左移和循环右移

    ror eax,cl ==> eax=(eax>>cl)+(eax<<(sizeof(eax)-cl)); rol eax,cl ==> eax=(eax<& ...