转自:http://sungang-1120.iteye.com/blog/2104296

Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

logback.xml配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
  3. <!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出 -->
  4. <!-- 以下  每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->
  5. <!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
  6. debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
  7. <configuration scan="true" scanPeriod="60 seconds" debug="false">
  8. <!-- 定义日志文件 输入位置 -->
  9. <property name="log_dir" value="/logs/ev_cmdb" />
  10. <!-- 日志最大的历史 30天 -->
  11. <property name="maxHistory" value="30"/>
  12. <!-- ConsoleAppender 控制台输出日志 -->
  13. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  14. <!-- 对日志进行格式化 -->
  15. <encoder>
  16. <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
  17. </encoder>
  18. </appender>
  19. <!-- ERROR级别日志 -->
  20. <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
  21. <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
  22. <!-- 过滤器,只记录WARN级别的日志 -->
  23. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  24. <level>ERROR</level>
  25. <onMatch>ACCEPT</onMatch>
  26. <onMismatch>DENY</onMismatch>
  27. </filter>
  28. <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
  29. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  30. <!--日志输出位置  可相对、和绝对路径 -->
  31. <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/error-log.log</fileNamePattern>
  32. <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,
  33. 则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->
  34. <maxHistory>${maxHistory}</maxHistory>
  35. </rollingPolicy>
  36. <!-- 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。
  37. <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
  38. <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern>
  39. <minIndex>1</minIndex>
  40. <maxIndex>3</maxIndex>
  41. </rollingPolicy>   -->
  42. <!-- 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动
  43. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  44. <maxFileSize>5MB</maxFileSize>
  45. </triggeringPolicy>   -->
  46. <encoder>
  47. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
  48. </encoder>
  49. </appender>
  50. <!-- WARN级别日志 appender -->
  51. <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
  52. <!-- 过滤器,只记录WARN级别的日志 -->
  53. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  54. <level>WARN</level>
  55. <onMatch>ACCEPT</onMatch>
  56. <onMismatch>DENY</onMismatch>
  57. </filter>
  58. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  59. <!-- 按天回滚 daily -->
  60. <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn-log.log
  61. </fileNamePattern>
  62. <!-- 日志最大的历史 60天 -->
  63. <maxHistory>${maxHistory}</maxHistory>
  64. </rollingPolicy>
  65. <encoder>
  66. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
  67. </encoder>
  68. </appender>
  69. <!-- INFO级别日志 appender -->
  70. <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
  71. <!-- 过滤器,只记录INFO级别的日志 -->
  72. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  73. <level>INFO</level>
  74. <onMatch>ACCEPT</onMatch>
  75. <onMismatch>DENY</onMismatch>
  76. </filter>
  77. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  78. <!-- 按天回滚 daily -->
  79. <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info-log.log
  80. </fileNamePattern>
  81. <!-- 日志最大的历史 60天 -->
  82. <maxHistory>${maxHistory}</maxHistory>
  83. </rollingPolicy>
  84. <encoder>
  85. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
  86. </encoder>
  87. </appender>
  88. <!-- DEBUG级别日志 appender -->
  89. <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  90. <!-- 过滤器,只记录DEBUG级别的日志 -->
  91. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  92. <level>DEBUG</level>
  93. <onMatch>ACCEPT</onMatch>
  94. <onMismatch>DENY</onMismatch>
  95. </filter>
  96. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  97. <!-- 按天回滚 daily -->
  98. <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug-log.log
  99. </fileNamePattern>
  100. <!-- 日志最大的历史 60天 -->
  101. <maxHistory>${maxHistory}</maxHistory>
  102. </rollingPolicy>
  103. <encoder>
  104. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
  105. </encoder>
  106. </appender>
  107. <!-- TRACE级别日志 appender -->
  108. <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  109. <!-- 过滤器,只记录ERROR级别的日志 -->
  110. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  111. <level>TRACE</level>
  112. <onMatch>ACCEPT</onMatch>
  113. <onMismatch>DENY</onMismatch>
  114. </filter>
  115. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  116. <!-- 按天回滚 daily -->
  117. <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/trace-log.log
  118. </fileNamePattern>
  119. <!-- 日志最大的历史 60天 -->
  120. <maxHistory>${maxHistory}</maxHistory>
  121. </rollingPolicy>
  122. <encoder>
  123. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
  124. </encoder>
  125. </appender>
  126. <logger name="java.sql.PreparedStatement" value="DEBUG" />
  127. <logger name="java.sql.Connection" value="DEBUG" />
  128. <logger name="java.sql.Statement" value="DEBUG" />
  129. <logger name="com.ibatis" value="DEBUG" />
  130. <logger name="com.ibatis.common.jdbc.SimpleDataSource" value="DEBUG" />
  131. <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG"/>
  132. <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" value="DEBUG" />
  133. <!-- root级别   DEBUG -->
  134. <root level="debug">
  135. <!-- 控制台输出 -->
  136. <appender-ref ref="STDOUT" />
  137. <!-- 文件输出 -->
  138. <appender-ref ref="ERROR" />
  139. <appender-ref ref="INFO" />
  140. <appender-ref ref="WARN" />
  141. <appender-ref ref="DEBUG" />
  142. <appender-ref ref="TRACE" />
  143. </root>
  144. </configuration>

LogUtils.java

  1. package log.base;
  2. package com.ghca.easyview.server.common.utils;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. public class LogUtils {
  6. /**
  7. * 错误输入日志
  8. */
  9. public static final Logger log = LoggerFactory.getLogger(LogUtils.class);
  10. /**
  11. * 记录一直 info信息
  12. *
  13. * @param message
  14. */
  15. public static void logInfo(String message) {
  16. StringBuilder s = new StringBuilder();
  17. s.append((message));
  18. log.info(s.toString());
  19. }
  20. public static void logInfo(String message, Throwable e) {
  21. StringBuilder s = new StringBuilder();
  22. s.append(("exception : -->>"));
  23. s.append((message));
  24. log.info(s.toString(), e);
  25. }
  26. public static void logWarn(String message) {
  27. StringBuilder s = new StringBuilder();
  28. s.append((message));
  29. log.warn(s.toString());
  30. }
  31. public static void logWarn(String message, Throwable e) {
  32. StringBuilder s = new StringBuilder();
  33. s.append(("exception : -->>"));
  34. s.append((message));
  35. log.warn(s.toString(), e);
  36. }
  37. public static void logDebug(String message) {
  38. StringBuilder s = new StringBuilder();
  39. s.append((message));
  40. log.debug(s.toString());
  41. }
  42. public static void logDebug(String message, Throwable e) {
  43. StringBuilder s = new StringBuilder();
  44. s.append(("exception : -->>"));
  45. s.append((message));
  46. log.debug(s.toString(), e);
  47. }
  48. public static void logError(String message) {
  49. StringBuilder s = new StringBuilder();
  50. s.append(message);
  51. log.error(s.toString());
  52. }
  53. /**
  54. * 记录日志错误信息
  55. *
  56. * @param message
  57. * @param e
  58. */
  59. public static void logError(String message, Throwable e) {
  60. StringBuilder s = new StringBuilder();
  61. s.append(("exception : -->>"));
  62. s.append((message));
  63. log.error(s.toString(), e);
  64. }
  65. }

TEST

  1. package com.ghca.easyview.server.log.test;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import ch.qos.logback.core.joran.spi.JoranException;
  9. import com.ghca.easyview.server.common.utils.LogBackConfigLoader;
  10. import com.ghca.easyview.server.common.utils.LogUtils;
  11. import com.ghca.easyview.server.config.ServerConfig;
  12. public class TestLog {
  13. @Before
  14. public void before() {
  15. File file = new File(System.getProperty("user.dir"));
  16. String path = file.getPath() + File.separator + "conf";
  17. // 将主要配置文件路径赋值给 ServerConfig.configPath属性
  18. ServerConfig.config_path = path;
  19. try {
  20. // 加载日志文件
  21. LogBackConfigLoader.load(ServerConfig
  22. .loadLogBackConfPath("logback.xml"));
  23. } catch (IOException | JoranException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. @Test
  28. public void test1() {
  29. LogUtils.logInfo("INFO ~");
  30. LogUtils.logDebug("DEBUG ~");
  31. LogUtils.logError("ERROR~");
  32. LogUtils.logWarn("WARN ~");
  33. }
  34. }

根据日志级别输出不等的日志信息,

使用logback.xml配置来实现日志文件输出的更多相关文章

  1. 关于日志slf4j+logback&logback.xml配置

    1.maven依赖 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <!-- <dependen ...

  2. springmvc项目 logback.xml配置 logstash日志收集

    配置logback,需要一个转接的Appender,可以通过Maven依赖加到项目中: <dependency> <groupId>com.cwbase</groupId ...

  3. logback.xml配置详解

    先附上本文分析用的例子: <?xml version="1.0" encoding="UTF-8" ?> <configuration> ...

  4. 常用logback.xml配置详解

    选择logback的理由 ==logback==与==log4j==的简单对比一下: 1.首先,对于同样的代码路径,==logback==使用起来更快. 2.==logback==原生实现了log4j ...

  5. logback.xml 配置详解(转)

    <?xml version="1.0" encoding="UTF-8"> <configuration> <!-- 设置控制台日 ...

  6. (六)logback.xml 配置详解

    原文链接:https://www.cnblogs.com/taiyonghai/p/9290641.html,https://blog.csdn.net/A615883576/article/deta ...

  7. logback.xml配置

    一:根节点<configuration>包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文 ...

  8. (转)Spring boot——logback.xml 配置详解(二)

    文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 1 根节点<configuration>包含的属性 scan: 当此属性设置为t ...

  9. logback.xml配置示例

    需要的jar如下: <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api< ...

随机推荐

  1. JCIFS读取远程服务器文件过慢的解决方法

    JCIFS读取远程服务器文件过慢的解决方法 发表于3年前(2013-07-12 11:23)   阅读(1174) | 评论(0) // 我要收藏"; var favor_del = &qu ...

  2. 什么是I帧,P帧,B帧

    视频压缩中,每帧代表一幅静止的图像.而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的.  简单地说,I帧是关键帧,属于帧内压缩.就是和AVI的压缩是一样的. P是向前搜索的意思.B ...

  3. PHP5.4连接sqlserver

    1.下载微软的php连接驱动:SQLSRV30.EXE(5.4对应,后面的native client要用2012)/SQLSRV20.EXE(5.3对应,native client要用2008)/SQ ...

  4. BZOJ 2440 完全平方数(莫比乌斯-容斥原理)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2440 题意:给定K.求不是完全平方数(这里1不算完全平方数)的倍数的数字组成的数字集合S ...

  5. /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found错误的解决

    升级cmake时,提示"Error when bootstrapping CMake:Problem while running initial CMake",第二次运行./boo ...

  6. eclipse mingw cpp开发环境

    Eclipse开发c++ 对比:微软的VC++6.0:太老了,对win7兼容不好, 现在微软的Visual Studio:安装包太大,好几个G,装了一堆你不需要的东西,要钱,教 育版申请麻烦 DOS下 ...

  7. Awesome Javascript(中文翻译版)

    [导读]:GitHub 上有一个 Awesome – XXX 系列的资源整理.awesome-javascript 是 sorrycc 发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架 ...

  8. Android百度地图

        帖子   热搜: 二维码 聊天 二维码扫描 传感器 游戏 定位 手势绘图 小项目 相框 绘图 涂鸦 拨打电话 记事本 定时器 通话记录 短信群发 listview 音乐播放器 项目例子 百度地 ...

  9. bzoj3955

    首先,最短路不同的两辆车一定不会发生堵塞 对于最短路相同的点,我们把属于最短路径上的边拎出来建图跑最大流即可 然后我TLE了…… 因为很明显建出来图很大,而真正流的流量很小 普通的初始标号都是0的sa ...

  10. 利用dns解析来实现网站的负载均衡

    当网站的访问量大了就会考虑负载均衡,这也是每一个架构师的基本功了,其基本地位就相当于相声里的说学逗唱,活好不好就看这个了 :) 传统的负载均衡思路是单点的,不管你是硬件的还是软件的基本都是这样的原理 ...