【Log】logback指定配置文件(二)
通常我们在不同的环境使用不同的日志配置文件,本章讲指定logback的配置文件,如何使用logback参照【Log】logback的配置和使用(一)
官方配置参考:http://logback.qos.ch/manual/appenders.html
写一个配置加载类,注意JoranConfigurator这个导入的是ch.qos.logback.classic.joran.JoranConfigurator包下面的
- package com.test;
- import java.io.File;
- import java.io.IOException;
- import java.util.Date;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import ch.qos.logback.classic.LoggerContext;
- import ch.qos.logback.classic.joran.JoranConfigurator;
- import ch.qos.logback.core.joran.spi.JoranException;
- import ch.qos.logback.core.util.StatusPrinter;
- /**
- *
- * @author H__D
- *
- */
- public class LogBackConfigLoader {
- public static void main(String[] args) throws IOException, JoranException {
- load("D:/logback.xml");
- Logger logger = LoggerFactory.getLogger(LogBackConfigLoader.class);
- logger.debug("现在的时间是 {}", new Date().toString());
- logger.info(" This time is {}", new Date().toString());
- logger.warn(" This time is {}", new Date().toString());
- logger.error(" This time is {}", new Date().toString());
- @SuppressWarnings("unused")
- int n = 1 / 0;
- }
- /**
- * 加载外部的logback配置文件
- *
- * @param externalConfigFileLocation
- * 配置文件路径
- * @throws IOException
- * @throws JoranException
- */
- public static void load(String externalConfigFileLocation) throws IOException, JoranException {
- LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
- File externalConfigFile = new File(externalConfigFileLocation);
- if (!externalConfigFile.exists()) {
- throw new IOException("Logback External Config File Parameter does not reference a file that exists");
- } else {
- if (!externalConfigFile.isFile()) {
- throw new IOException("Logback External Config File Parameter exists, but does not reference a file");
- } else {
- if (!externalConfigFile.canRead()) {
- throw new IOException("Logback External Config File exists and is a file, but cannot be read.");
- } else {
- JoranConfigurator configurator = new JoranConfigurator();
- configurator.setContext(lc);
- lc.reset();
- configurator.doConfigure(externalConfigFileLocation);
- StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
- }
- }
- }
- }
- }
D盘logback.xml文件如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!-- scan="true" 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
- <!-- scanPeriod="30 seconds" 设置每30秒自动扫描,若没有指定具体单位则以milliseconds为标准(单位:milliseconds, seconds, minutes or hours) -->
- <!-- debug="false"当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->
- <configuration scan="true" scanPeriod="30 seconds">
- <!-- 上下文名称 -->
- <contextName>test</contextName>
- <!-- 存放日志文件路径 -->
- <property name="Log_Home" value="D:/logs/test" />
- <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
- <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
- </encoder>
- </appender>
- <!-- DEBUG级别 -->
- <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <!-- 级别过滤器 -->
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <!-- 设置过滤级别 -->
- <level>DEBUG</level>
- <!-- 用于配置符合过滤条件的操作 -->
- <onMatch>ACCEPT</onMatch>
- <!-- 用于配置不符合过滤条件的操作 -->
- <onMismatch>DENY</onMismatch>
- </filter>
- <Encoding>UTF-8</Encoding>
- <File>${Log_Home}/debug/debug.log</File>
- <!-- 根据时间来制定滚动策略 -->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <FileNamePattern>
- ${Log_Home}/debug/debug.%d{yyyy-MM-dd}.%i.log
- </FileNamePattern>
- <!-- 多久后自动清楚旧的日志文件,单位:由FileNamePattern决定,此时是日 -->
- <MaxHistory>7</MaxHistory>
- <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <!-- 默认值是 10MB,文档最大值 -->
- <MaxFileSize>2MB</MaxFileSize>
- </TimeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <encoder>
- <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
- </encoder>
- </appender>
- <!-- INFO级别 -->
- <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <!-- 级别过滤器 -->
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <!-- 设置过滤级别 -->
- <level>INFO</level>
- <!-- 用于配置符合过滤条件的操作 -->
- <onMatch>ACCEPT</onMatch>
- <!-- 用于配置不符合过滤条件的操作 -->
- <onMismatch>DENY</onMismatch>
- </filter>
- <Encoding>UTF-8</Encoding>
- <File>${Log_Home}/info/info.log</File>
- <!-- 根据时间来制定滚动策略 -->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <FileNamePattern>
- ${Log_Home}/info/info.%d{yyyy-MM-dd}.%i.log
- </FileNamePattern>
- <!-- 多久后自动清楚旧的日志文件,单位:日 -->
- <MaxHistory>1</MaxHistory>
- <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <!-- 默认值是 10MB,文档最大值 -->
- <MaxFileSize>2MB</MaxFileSize>
- </TimeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <encoder>
- <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
- </encoder>
- </appender>
- <!-- WARN级别 -->
- <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <!-- 级别过滤器 -->
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <!-- 设置过滤级别 -->
- <level>WARN</level>
- <!-- 用于配置符合过滤条件的操作 -->
- <onMatch>ACCEPT</onMatch>
- <!-- 用于配置不符合过滤条件的操作 -->
- <onMismatch>DENY</onMismatch>
- </filter>
- <Encoding>UTF-8</Encoding>
- <File>${Log_Home}/warn/warn.log</File>
- <!-- 根据时间来制定滚动策略 -->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <FileNamePattern>
- ${Log_Home}/warn/warn.%d{yyyy-MM-dd}.%i.log
- </FileNamePattern>
- <!-- 多久后自动清楚旧的日志文件,单位:月 -->
- <MaxHistory>1</MaxHistory>
- <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <!-- 默认值是 10MB,文档最大值 -->
- <MaxFileSize>2MB</MaxFileSize>
- </TimeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <encoder>
- <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
- </encoder>
- </appender>
- <!-- ERROR级别 -->
- <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <!-- 级别过滤器 -->
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <!-- 设置过滤级别 -->
- <level>ERROR</level>
- <!-- 用于配置符合过滤条件的操作 -->
- <onMatch>ACCEPT</onMatch>
- <!-- 用于配置不符合过滤条件的操作 -->
- <onMismatch>DENY</onMismatch>
- </filter>
- <Encoding>UTF-8</Encoding>
- <File>${Log_Home}/error/error.log</File>
- <!-- 根据时间来制定滚动策略 -->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <FileNamePattern>
- ${Log_Home}/error/error.%d{yyyy-MM-dd}.%i.log
- </FileNamePattern>
- <!-- 多久后自动清楚旧的日志文件,单位:月 -->
- <MaxHistory>1</MaxHistory>
- <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <!-- 默认值是 10MB,文档最大值 -->
- <MaxFileSize>2MB</MaxFileSize>
- </TimeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <encoder>
- <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
- </encoder>
- </appender>
- <!-- 控制java下面包的打印,没设置等级,将继承上级root的等级,可以指定包和类的打印级别,属性additivity="false",可以阻止打印日志信息传递,默认为true。-->
- <logger name="com.test"/>
- <!-- 当前日志总级别为TRACE、DEBUG、INFO、 WARN、ERROR、ALL和 OF -->
- <!-- the level of the root level is set to DEBUG by default. -->
- <root level="DEBUG">
- <appender-ref ref="STDOUT" />
- <appender-ref ref="FILE_DEBUG" />
- <appender-ref ref="FILE_INFO" />
- <appender-ref ref="FILE_WARN" />
- <appender-ref ref="FILE_ERROR" />
- </root>
- </configuration>
注:appender相当于输出口,注意父子级的叠加输出
运行LogBackConfigLoader中的main方法,控制台输出如下:
- 2016-07-14 19:15:08 [main] DEBUG com.test.LogBackConfigLoader - 现在的时间是 Thu Jul 14 19:15:08 CST 2016
- 2016-07-14 19:15:08 [main] INFO com.test.LogBackConfigLoader - This time is Thu Jul 14 19:15:08 CST 2016
- 2016-07-14 19:15:08 [main] WARN com.test.LogBackConfigLoader - This time is Thu Jul 14 19:15:08 CST 2016
- 2016-07-14 19:15:08 [main] ERROR com.test.LogBackConfigLoader - This time is Thu Jul 14 19:15:08 CST 2016
- Exception in thread "main" java.lang.ArithmeticException: / by zero
- at com.test.LogBackConfigLoader.main(LogBackConfigLoader.java:36)
外部输入日志如下:
【Log】logback指定配置文件(二)的更多相关文章
- springboot打包去除资源文件,启动时指定配置文件位置,使用log4j2替换默认logback
springboot打包时,去掉资源文件 <build> <resources> <resource> <directory>src/main/reso ...
- Springboot日志配置探索(主要看logback)(二)
这篇博客主要是讲在Springboot中扩展的日志框架的配置,也是主要讲logback 8 继续看文档,这里讲到: springboot里面还有几个日志系统框架可以选择使用,你可以通过在classpa ...
- linux 下指定配置文件安装mongodb
下载 官网下载地址:https://www.mongodb.com/try/download/community,并上传linux 服务器 二.mongon目录结构下 /data/mongo . lo ...
- 从源码来理解slf4j的绑定,以及logback对配置文件的加载
项目中的日志系统使用的是slf4j + logback.slf4j作为一个简单日志门面,为各种loging APIs(像java.util.logging, logback, log4j)提供一个简单 ...
- springboot的logback的配置文件
之前敲出来一个 logback 的配置文件,防止以后找起来麻烦在这里存个档 修改了日志输出的内容 设置默认级别为 INFO 正常日志 ( TRACE 到 WARN ) 输出到单独的文件夹 异常日志 ( ...
- docker安装redis 指定配置文件且设置了密码
---------首先,所有docker的命令,都可以用 docker help 来查询,这个挺好的,我反正记不住辣么多命令呀. 1.直接pull 官方镜像吧.没啥说的,这样方便省事.如果你非要用 ...
- 微服务编译、启动jar命令指定配置文件
nohup java -Xms512m -Xmx8g -Xmn512m -Xss512k -server -XX:+HeapDumpOnOutOfMemoryError -jar smp-bill-c ...
- redis启动时指定配置文件
Redis 启动时指定配置文件需要通过 redis 服务启动才行: 安装服务的教程:http://blog.csdn.net/justinytsoft/article/details/54580919 ...
- nginx启动时指定配置文件
下载源文件方式安装nginx 会在/usr/local目录下安装nginx 此时虚拟机系统中会有两个nginx 如果启动的时候没有指定配置文件的位置,默认读取的配置文件就是/usr/local/ngi ...
随机推荐
- pythone--002
元组就是不可修改: 字典的索引不是自增的. 元组和列表是: 默认 是key 通过get 没有这个key 是none get可以有默认值: 通过索引 没有就报错. 检查字典中某个可以是否存在:ha ...
- CSS 3栏自适应布局
绝对定位 css html,body{margin: 0px;height:100%;} div{height: 100%;} .left,.right {top: 0px;position: abs ...
- Activity工作流学习(一)——Activity服务类
Activity有9个service1.DynamicBpmnService动态Bpmn服务Service providing access to the repository of process ...
- 前端开发-4-HTML-table&form&表单控制 标签
1.table标签 <!DOCTYPE html> <html lang="cn"> <head> <meta charset=" ...
- Oracle+Mybatis批量插入,更新和删除
1.插入 (1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过) <insert id="inse ...
- eclipse添加源码的另外一种方法
当我们使用maven或者gradle时,我们不需要担心源码的问题.Maven会帮我们下载jar包的同时下载对应的源码包.一般为source.jar,比如servlet-api-2.5-sources. ...
- 使用HttpURLConnection时遇到的资源未释放的问题
http://blog.sina.com.cn/s/blog_56beadc60100j9zu.html 今天自己写了一个压力测试的小程序,同时启100个线程,每个线程都串行地访问应用服务器上的一个j ...
- 实现Action的三种方式
实现Action的三种方式: 1.普通类 一般采用此种方法 2.实现Action接口 3.继承ActionSupport类
- Linux Tomcat重新启动
在Linux系统下,重启Tomcat使用命令操作的! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看 ...
- Python实现的常用排序方法
1.冒泡排序,相邻位置比较大小,将比较大的(或小的)交换位置 def maopao(a): for i in range(0,len(a)): for j in range(0 ...