【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 ...
随机推荐
- oracle使用随笔
一,centos 7安装桌面环境 首先使用命令yum grouplist查看可以使用的group ,第一步,命令安装Gnome Desktop,第二步,yum groupinstall "X ...
- sparkcontext 和 sparkconf
http://spark.apache.org/docs/latest/rdd-programming-guide.html The first thing a Spark program must ...
- 34. Studio字符串分割split用法
var v = "1,2,3"; var arr = v.toString().split(","); 备注:最好先toString()转为字符串,不然有些情况 ...
- webstorm使用
1. 打开toolbar 2. 安装vue.js 3. 设置new vue file模板 <template> <div> <header-component/> ...
- idea中创建多module的maven工程
以前自学Java web的时候,我们都是创建一个web工程,该工程下面再创建dao.service.controller等包.自从工作以后,我们会发现现在的web项目包含多个module,contro ...
- VB6 如何创建一个标准控制台程序
打开 VB6 并新建一个标准EXE程序,把窗口删掉,然后再加入一个模块. 在模块中加入AllocConsole.FreeConsole.SetConsoleTitle.Sleep的API声明: Pub ...
- CentOS 7 firewalld
1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disabl ...
- Java 8 日期时间API
Java 8一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期; 在介绍本篇文章内容之前,我们先来讨论Jav ...
- springMVC学习记录2-使用注解配置
前面说了一下使用xml配置springmvc,下面再说说注解配置.项目如下: 业务很简单,主页和输入用户名和密码进行登陆的页面. 看一下springmvc的配置文件: <?xml version ...
- Linux多网卡负载均衡 : bond
USERCTL=no/yes 普通用户是否可以关闭或启用网关 -------------------------------- 在这介绍的Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个 ...