【Log】logback指定配置文件(二)

摘自:https://www.cnblogs.com/h--d/p/5671528.html

【Log】logback指定配置文件(二)

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

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

外部输入日志如下:

原文地址:https://www.cnblogs.com/LiuYanYGZ/p/9612060.html

时间: 2024-07-28 16:36:36

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

POJ C++程序设计 编程题#10:输出指定结果二

编程题#10:输出指定结果二 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 通过填空使得程序输出的结果符合下面的要求. #include <iostream> #include <map> using namespace std; // 在此处补充你的代码 int A::count = 0; void func(B b) { } int mai

Got fatal error 1236 from master when reading data from binary log: &#39;Could not find first log file name in binary log index file&#39;系列二:reset slave

reset slave会清除从库的所有复制信息.一般应用场景:如切换为不同的Master, 主从重做等: 1. 命令在slave上执行,执行前一定要stop slave. 2. 执行reset slave后,会清除复制相关的所有信息,包括:master.info, relay-log.info, 及无条件删除所有的中继日志(relay logs). 注意是无条件的,也就是不管理你Slave SQL线程是否把所有的relay log重放完了. 3. 注意,stop slave后,先保存show s

git log 查看指定文件的提交记录

使用git log除了可以看整个仓库的提交记录外,还可以指定某个文件的提交记录. 1. 查看指定文件的历史提交记录 命令: git log -- <file> 说明:只需要指定文件名称. 示例: 2. 查看每次提交的内容差异 命令: git log -p -2 -- <file> 参数:-p 表示每次提交的内容差异,-2 则表示显示最近的两次更新. 说明:该选项除了显示基本信息之外,还在附带了每次 commit 的变化. 示例: 3. 单词层面上的对比 命令: git log --

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

https://www.cnblogs.com/youzhibing/p/6849843.html 编译期间,完成slf4j的绑定已经logback配置文件的加载.slf4j会在classpath中寻找org/slf4j/impl/StaticLoggerBinder.class(会在具体的日志框架如log4j.logback等中存在),找到并完成绑定:同时,logback也会在classpath中寻找配置文件,先找logback.configurationFile.没有则找logback.gr

logback日志配置文件

Logback是由log4j创始人设计的又一个开源日志组件.具体描述自行百度 接下来直接上干货: 1.xml文件及相关注释如下 <?xml version="1.0" encoding="UTF-8"?> <!-- 根节点<configuration>,包含下面三个属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有

java web工程中logback换配置文件的路径

本人小网站:   http://51kxd.com/  欢迎大家不开心的时候访问访问,调节一下心情 web.xml中配置: <!-- windows  logback.xml文件跟web容器(比如tomcat)在同一个目录中.linux随意  --> <context-param> <param-name>logbackConfigLocation</param-name> <param-value>file:/datum/Data/conf/c

java webproject中logback换配置文件的路径

本人小站点:   http://51kxd.com/  欢迎大家不开心的时候訪问訪问,调节一下心情 web.xml中配置: <!-- windows  logback.xml文件跟web容器(比方tomcat)在同一个文件夹中.linux任意  --> <context-param> <param-name>logbackConfigLocation</param-name> <param-value>file:/datum/Data/conf/

php-pfm指定配置文件

一,php-fpm的启动参数 代码如下: #测试php-fpm配置/usr/local/php/sbin/php-fpm -t/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t #启动php-fpm/usr/local/php/sbin/php-fpm/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.

Logback的配置文件查找顺序

问题 使用slf4j和logback记录日志,有这样一个需求,如果指定了一个特定logback.xml,就用指定的配置,如果没有,则系统提供一个默认的配置. 解决 classpath下放一个配置文件logback.xml,使用环境变量logback.configurationFile指定另一个配置.logback会首先使用环境变量指定的文件,如果没有指定或文件不存在,logback会使用classpath下的文件. 原理 - logback配置文件查找过程 1. 使用如下代码获取日志器 impo