通常我们在不同的环境使用不同的日志配置文件,本章讲指定logback的配置文件,如何使用logback参照【Log】logback的配置和使用(一)

官方配置参考:http://logback.qos.ch/manual/appenders.html

写一个配置加载类,注意JoranConfigurator这个导入的是ch.qos.logback.classic.joran.JoranConfigurator包下面的

  1. package com.test;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.Date;
  6.  
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9.  
  10. import ch.qos.logback.classic.LoggerContext;
  11. import ch.qos.logback.classic.joran.JoranConfigurator;
  12. import ch.qos.logback.core.joran.spi.JoranException;
  13. import ch.qos.logback.core.util.StatusPrinter;
  14.  
  15. /**
  16. *
  17. * @author H__D
  18. *
  19. */
  20. public class LogBackConfigLoader {
  21.  
  22. public static void main(String[] args) throws IOException, JoranException {
  23. load("D:/logback.xml");
  24.  
  25. Logger logger = LoggerFactory.getLogger(LogBackConfigLoader.class);
  26.  
  27. logger.debug("现在的时间是 {}", new Date().toString());
  28.  
  29. logger.info(" This time is {}", new Date().toString());
  30.  
  31. logger.warn(" This time is {}", new Date().toString());
  32.  
  33. logger.error(" This time is {}", new Date().toString());
  34.  
  35. @SuppressWarnings("unused")
  36. int n = 1 / 0;
  37. }
  38.  
  39. /**
  40. * 加载外部的logback配置文件
  41. *
  42. * @param externalConfigFileLocation
  43. * 配置文件路径
  44. * @throws IOException
  45. * @throws JoranException
  46. */
  47. public static void load(String externalConfigFileLocation) throws IOException, JoranException {
  48.  
  49. LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
  50.  
  51. File externalConfigFile = new File(externalConfigFileLocation);
  52.  
  53. if (!externalConfigFile.exists()) {
  54.  
  55. throw new IOException("Logback External Config File Parameter does not reference a file that exists");
  56.  
  57. } else {
  58.  
  59. if (!externalConfigFile.isFile()) {
  60. throw new IOException("Logback External Config File Parameter exists, but does not reference a file");
  61.  
  62. } else {
  63.  
  64. if (!externalConfigFile.canRead()) {
  65. throw new IOException("Logback External Config File exists and is a file, but cannot be read.");
  66.  
  67. } else {
  68.  
  69. JoranConfigurator configurator = new JoranConfigurator();
  70. configurator.setContext(lc);
  71. lc.reset();
  72. configurator.doConfigure(externalConfigFileLocation);
  73.  
  74. StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
  75. }
  76.  
  77. }
  78.  
  79. }
  80.  
  81. }
  82. }

D盘logback.xml文件如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2.  
  3. <!-- scan="true" 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
  4. <!-- scanPeriod="30 seconds" 设置每30秒自动扫描,若没有指定具体单位则以milliseconds为标准(单位:milliseconds, seconds, minutes or hours) -->
  5. <!-- debug="false"当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->
  6. <configuration scan="true" scanPeriod="30 seconds">
  7. <!-- 上下文名称 -->
  8. <contextName>test</contextName>
  9.  
  10. <!-- 存放日志文件路径 -->
  11. <property name="Log_Home" value="D:/logs/test" />
  12.  
  13. <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
  14. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  15. <encoder>
  16. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
  17. <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
  18. </encoder>
  19. </appender>
  20.  
  21. <!-- DEBUG级别 -->
  22. <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  23.  
  24. <!-- 级别过滤器 -->
  25. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  26. <!-- 设置过滤级别 -->
  27. <level>DEBUG</level>
  28. <!-- 用于配置符合过滤条件的操作 -->
  29. <onMatch>ACCEPT</onMatch>
  30. <!-- 用于配置不符合过滤条件的操作 -->
  31. <onMismatch>DENY</onMismatch>
  32. </filter>
  33. <Encoding>UTF-8</Encoding>
  34. <File>${Log_Home}/debug/debug.log</File>
  35. <!-- 根据时间来制定滚动策略 -->
  36. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  37. <FileNamePattern>
  38. ${Log_Home}/debug/debug.%d{yyyy-MM-dd}.%i.log
  39. </FileNamePattern>
  40. <!-- 多久后自动清楚旧的日志文件,单位:由FileNamePattern决定,此时是日 -->
  41. <MaxHistory>7</MaxHistory>
  42. <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  43. <!-- 默认值是 10MB,文档最大值 -->
  44. <MaxFileSize>2MB</MaxFileSize>
  45. </TimeBasedFileNamingAndTriggeringPolicy>
  46. </rollingPolicy>
  47.  
  48. <encoder>
  49. <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
  50. </encoder>
  51. </appender>
  52.  
  53. <!-- INFO级别 -->
  54. <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
  55.  
  56. <!-- 级别过滤器 -->
  57. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  58. <!-- 设置过滤级别 -->
  59. <level>INFO</level>
  60. <!-- 用于配置符合过滤条件的操作 -->
  61. <onMatch>ACCEPT</onMatch>
  62. <!-- 用于配置不符合过滤条件的操作 -->
  63. <onMismatch>DENY</onMismatch>
  64. </filter>
  65. <Encoding>UTF-8</Encoding>
  66. <File>${Log_Home}/info/info.log</File>
  67. <!-- 根据时间来制定滚动策略 -->
  68. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  69. <FileNamePattern>
  70. ${Log_Home}/info/info.%d{yyyy-MM-dd}.%i.log
  71. </FileNamePattern>
  72. <!-- 多久后自动清楚旧的日志文件,单位:日 -->
  73. <MaxHistory>1</MaxHistory>
  74. <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  75. <!-- 默认值是 10MB,文档最大值 -->
  76. <MaxFileSize>2MB</MaxFileSize>
  77. </TimeBasedFileNamingAndTriggeringPolicy>
  78. </rollingPolicy>
  79.  
  80. <encoder>
  81. <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
  82. </encoder>
  83. </appender>
  84.  
  85. <!-- WARN级别 -->
  86. <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
  87.  
  88. <!-- 级别过滤器 -->
  89. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  90. <!-- 设置过滤级别 -->
  91. <level>WARN</level>
  92. <!-- 用于配置符合过滤条件的操作 -->
  93. <onMatch>ACCEPT</onMatch>
  94. <!-- 用于配置不符合过滤条件的操作 -->
  95. <onMismatch>DENY</onMismatch>
  96. </filter>
  97. <Encoding>UTF-8</Encoding>
  98. <File>${Log_Home}/warn/warn.log</File>
  99. <!-- 根据时间来制定滚动策略 -->
  100. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  101. <FileNamePattern>
  102. ${Log_Home}/warn/warn.%d{yyyy-MM-dd}.%i.log
  103. </FileNamePattern>
  104. <!-- 多久后自动清楚旧的日志文件,单位:月 -->
  105. <MaxHistory>1</MaxHistory>
  106. <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  107. <!-- 默认值是 10MB,文档最大值 -->
  108. <MaxFileSize>2MB</MaxFileSize>
  109. </TimeBasedFileNamingAndTriggeringPolicy>
  110. </rollingPolicy>
  111.  
  112. <encoder>
  113. <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
  114. </encoder>
  115. </appender>
  116.  
  117. <!-- ERROR级别 -->
  118. <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
  119.  
  120. <!-- 级别过滤器 -->
  121. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  122. <!-- 设置过滤级别 -->
  123. <level>ERROR</level>
  124. <!-- 用于配置符合过滤条件的操作 -->
  125. <onMatch>ACCEPT</onMatch>
  126. <!-- 用于配置不符合过滤条件的操作 -->
  127. <onMismatch>DENY</onMismatch>
  128. </filter>
  129. <Encoding>UTF-8</Encoding>
  130. <File>${Log_Home}/error/error.log</File>
  131. <!-- 根据时间来制定滚动策略 -->
  132. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  133. <FileNamePattern>
  134. ${Log_Home}/error/error.%d{yyyy-MM-dd}.%i.log
  135. </FileNamePattern>
  136. <!-- 多久后自动清楚旧的日志文件,单位:月 -->
  137. <MaxHistory>1</MaxHistory>
  138. <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  139. <!-- 默认值是 10MB,文档最大值 -->
  140. <MaxFileSize>2MB</MaxFileSize>
  141. </TimeBasedFileNamingAndTriggeringPolicy>
  142. </rollingPolicy>
  143.  
  144. <encoder>
  145. <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
  146. </encoder>
  147. </appender>
  148.  
  149. <!-- 控制java下面包的打印,没设置等级,将继承上级root的等级,可以指定包和类的打印级别,属性additivity="false",可以阻止打印日志信息传递,默认为true。-->
  150. <logger name="com.test"/>
  151.  
  152. <!-- 当前日志总级别为TRACE、DEBUG、INFO、 WARN、ERROR、ALL和 OF -->
  153. <!-- the level of the root level is set to DEBUG by default. -->
  154. <root level="DEBUG">
  155. <appender-ref ref="STDOUT" />
  156. <appender-ref ref="FILE_DEBUG" />
  157. <appender-ref ref="FILE_INFO" />
  158. <appender-ref ref="FILE_WARN" />
  159. <appender-ref ref="FILE_ERROR" />
  160. </root>
  161. </configuration>

注:appender相当于输出口,注意父子级的叠加输出

运行LogBackConfigLoader中的main方法,控制台输出如下:

  1. 2016-07-14 19:15:08 [main] DEBUG com.test.LogBackConfigLoader - 现在的时间是 Thu Jul 14 19:15:08 CST 2016
  2. 2016-07-14 19:15:08 [main] INFO com.test.LogBackConfigLoader - This time is Thu Jul 14 19:15:08 CST 2016
  3. 2016-07-14 19:15:08 [main] WARN com.test.LogBackConfigLoader - This time is Thu Jul 14 19:15:08 CST 2016
  4. 2016-07-14 19:15:08 [main] ERROR com.test.LogBackConfigLoader - This time is Thu Jul 14 19:15:08 CST 2016
  5. Exception in thread "main" java.lang.ArithmeticException: / by zero
  6. at com.test.LogBackConfigLoader.main(LogBackConfigLoader.java:36)

外部输入日志如下:

【Log】logback指定配置文件(二)的更多相关文章

  1. springboot打包去除资源文件,启动时指定配置文件位置,使用log4j2替换默认logback

    springboot打包时,去掉资源文件 <build> <resources> <resource> <directory>src/main/reso ...

  2. Springboot日志配置探索(主要看logback)(二)

    这篇博客主要是讲在Springboot中扩展的日志框架的配置,也是主要讲logback 8 继续看文档,这里讲到: springboot里面还有几个日志系统框架可以选择使用,你可以通过在classpa ...

  3. linux 下指定配置文件安装mongodb

    下载 官网下载地址:https://www.mongodb.com/try/download/community,并上传linux 服务器 二.mongon目录结构下 /data/mongo . lo ...

  4. 从源码来理解slf4j的绑定,以及logback对配置文件的加载

    项目中的日志系统使用的是slf4j + logback.slf4j作为一个简单日志门面,为各种loging APIs(像java.util.logging, logback, log4j)提供一个简单 ...

  5. springboot的logback的配置文件

    之前敲出来一个 logback 的配置文件,防止以后找起来麻烦在这里存个档 修改了日志输出的内容 设置默认级别为 INFO 正常日志 ( TRACE 到 WARN ) 输出到单独的文件夹 异常日志 ( ...

  6. docker安装redis 指定配置文件且设置了密码

    ---------首先,所有docker的命令,都可以用 docker help 来查询,这个挺好的,我反正记不住辣么多命令呀.   1.直接pull 官方镜像吧.没啥说的,这样方便省事.如果你非要用 ...

  7. 微服务编译、启动jar命令指定配置文件

    nohup java -Xms512m -Xmx8g -Xmn512m -Xss512k -server -XX:+HeapDumpOnOutOfMemoryError -jar smp-bill-c ...

  8. redis启动时指定配置文件

    Redis 启动时指定配置文件需要通过 redis 服务启动才行: 安装服务的教程:http://blog.csdn.net/justinytsoft/article/details/54580919 ...

  9. nginx启动时指定配置文件

    下载源文件方式安装nginx 会在/usr/local目录下安装nginx 此时虚拟机系统中会有两个nginx 如果启动的时候没有指定配置文件的位置,默认读取的配置文件就是/usr/local/ngi ...

随机推荐

  1. pythone--002

    元组就是不可修改: 字典的索引不是自增的.  元组和列表是: 默认 是key 通过get  没有这个key  是none get可以有默认值: 通过索引 没有就报错. 检查字典中某个可以是否存在:ha ...

  2. CSS 3栏自适应布局

    绝对定位 css html,body{margin: 0px;height:100%;} div{height: 100%;} .left,.right {top: 0px;position: abs ...

  3. Activity工作流学习(一)——Activity服务类

    Activity有9个service1.DynamicBpmnService动态Bpmn服务Service providing access to the repository of process ...

  4. 前端开发-4-HTML-table&form&表单控制 标签

    1.table标签 <!DOCTYPE html> <html lang="cn"> <head> <meta charset=" ...

  5. Oracle+Mybatis批量插入,更新和删除

    1.插入 (1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过) <insert id="inse ...

  6. eclipse添加源码的另外一种方法

    当我们使用maven或者gradle时,我们不需要担心源码的问题.Maven会帮我们下载jar包的同时下载对应的源码包.一般为source.jar,比如servlet-api-2.5-sources. ...

  7. 使用HttpURLConnection时遇到的资源未释放的问题

    http://blog.sina.com.cn/s/blog_56beadc60100j9zu.html 今天自己写了一个压力测试的小程序,同时启100个线程,每个线程都串行地访问应用服务器上的一个j ...

  8. 实现Action的三种方式

    实现Action的三种方式: 1.普通类  一般采用此种方法 2.实现Action接口 3.继承ActionSupport类

  9. Linux Tomcat重新启动

    在Linux系统下,重启Tomcat使用命令操作的! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看 ...

  10. Python实现的常用排序方法

    1.冒泡排序,相邻位置比较大小,将比较大的(或小的)交换位置 def maopao(a):     for i in range(0,len(a)):         for j in range(0 ...