转载:logback不同业务的日志打印到不同文件

一、logback.xml文件配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<contextName>nana</contextName>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>[%d{HH:mm:ss.SSS}] [%5level] [%thread] %logger{36} %msg%n</Pattern>
<charset>UTF-8</charset>
</encoder>
</appender> <appender name="INFO_NANA" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>../normalInfo.log</file> <encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!--过滤器,只打INFO级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>normalInfo.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
</appender> <appender name="ERROR_NANA" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>../normalError.log</file> <encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!--过滤器,只打ERROR级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>normalError.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
</appender> <!--不同业务逻辑的日志打印到不同文件-->
<appender name="FIRST_NANA" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>../firstInfo.log</file> <encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>firstInfo.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
</appender> <appender name="SECOND_NANA" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>../secondInfo.log</file> <encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>secondInfo.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
</appender>

   <!-- 不同的业务逻辑日志打印到指定文件夹-->
<logger name="first" level="info" additivity="false">
<appender-ref ref="FIRST_NANA"/>
</logger>
<logger name="second" level="info" additivity="false">
<appender-ref ref="SECOND_NANA"/>
</logger> <!--info和error分开打印-->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFO_NANA"/>
<appender-ref ref="ERROR_NANA"/>
</root> </configuration>

二、工具类配置:

创建与logback.xml的logger名相对应的对象:

public enum LogFileName {

    // 与logback.xml的logger name 相同
FIRST("first"),
SECOND("second"); private String logFileName; LogFileName(String fileName) {
this.logFileName = fileName;
} public String getLogFileName() {
return logFileName;
} public void setLogFileName(String logFileName) {
this.logFileName = logFileName;
} public static LogFileName getAwardTypeEnum(String value) {
LogFileName[] arr = values();
for(LogFileName item : arr) {
if(null != item && StringUtils.isNotBlank(item.logFileName)) {
return item;
}
}
return null;
}
}

指定logger日志存储路径,工具类:

public class LoggerUtil {
public static <T> Logger logger(Class<T> clazz) {
return LoggerFactory.getLogger(clazz);
} /**
* 打印到指定的文件下
* @param desc 日志文件名称
* @return
*/
public static Logger logger(LogFileName desc) {
return LoggerFactory.getLogger(desc.getLogFileName());
}
}

测试如下:

@RestController
public class UserController { Logger FIRST_LOG = LoggerUtil.logger(LogFileName.FIRST);
Logger SECOND_LOG = LoggerUtil.logger(LogFileName.SECOND); @RequestMapping("/bb")
public String bb() {
FIRST_LOG.info("firsthaha");
SECOND_LOG.info("secondhaha");
return "bb";
} }

结果如下图:

logback将日志写入不同文件夹里的更多相关文章

  1. MyEclipse里项目部署到tomcat上之后,tomcat webpps文件夹里为什么找不到这个项目

         今天在MyEclipse中部署了一个java web项目,然后发现报404错误,跑到tomcat目录下的webapps文件夹里并发现没有这个项目,才发现MyEclipse没有写入webapp ...

  2. Java以流的方式将指定文件夹里的.txt文件全部复制到另一文件夹,并删除原文件夹中所有.txt文件

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  3. Python + logging输出到屏幕,将log日志写入到文件

    logging提供了一组便利的函数,用来做简单的日志.它们是 debug(). info(). warning(). error() 和 critical(). logging函数根据它们用来跟踪的事 ...

  4. su认证失败&文件夹里打开终端的方法&atom安装

    很久没用笔记本上的ubuntu,用不顺手,比在公司调教了半年多的电脑差远了.一步一步来.先解决最不顺手的三件事 1.su认证失败. 新安装的ubuntu系统是无法切换到root账户的,得做一番修改 s ...

  5. SQL扫描并执行文件夹里的sql脚本

    场景:项目数据库操作全部使用存储过程实现.每天都会有很多存储过程更新/增加,人工对测试环境中存储过程更新,会有一定概率出现遗漏,也麻烦!所以,需要一个工具将文件夹中所有存         储过程执行一 ...

  6. 将Temporary文件夹里的Logo文件转移到Logo文件夹

    /// <summary> /// 将Temporary文件夹里的Logo文件转移到Logo文件夹 /// </summary> /// <param name=&quo ...

  7. diff两个文件夹里的东西

    diff --help -x, --exclude=PAT               exclude files that match PAT 排除某个类型的文件 -u, -U NUM, --uni ...

  8. jq和js插件的各个文件夹里放置的内容

    1. demo文件夹,存放各种实例. 2. dist文件夹,全称是distribution.在某些框架中,因为开发和发布的内容或者代码形式是不一样的(比如利用Grunt压缩等等),这时候就需要一个存放 ...

  9. 使用everything把一个文件夹里(包含子目录)的所有图片拷贝到另一个文件夹

    最近在找数据集,想要预览数据集里面的全部图片,而因为一些数据集的数据存储方式使得图片都分布在若干层后的子文件里,所以就需要一个如题所示的功能. 找了一堆XCOPY命令的使用方法,差点要撸起袖子写代码干 ...

随机推荐

  1. 九、curator recipes之不可重入锁InterProcessSemaphoreMutex

    简介 recipes的InterProcessSemaphoreMutex是一种不可重入的互斥锁,也就意味着即使是同一个线程也无法在持有锁的情况下再次获得锁,所以需要注意,不可重入的锁很容易在一些情况 ...

  2. 基于Github搭建SrpingCloudConfig详解

    最近在看SpringCloud,为了帮助自己学习和记忆,所以写下这篇文章. 从SpringCloud官方文档上看SpringCloudConfig其实为我们提供配置外部化的一个服务,可以理解成就是个w ...

  3. MyBatis学习(二)---数据表之间关联

    想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302. ...

  4. jQuery动态创建的dom对象不能绑定事件的解决方法

    参照网上前辈: 方法一:绑定live事件 live(type,[data],fn) $(selector).live("click",function(){ alert(" ...

  5. CF17E Palisection

    题意 给定一个长度为n的小写字母串.问你有多少对相交的回文子串(包含也算相交) 相交的回文子串个数 \(mod\ 51123987\) Sol 求相交的回文子串不太好求 考虑用总数减去不相交的回文串个 ...

  6. luogu P3065 first——trie树相关

    题目描述 Bessie has been playing with strings again. She found that by changing the order of the alphabe ...

  7. 关于 PHPMailer 邮件发送类的使用心得(含多文件上传)

    This is important for send mail PHPMailer 核心文件 class.phpmailer.php class.phpmaileroauth.php class.ph ...

  8. appium定位安装包启动类名称

    cmd输入:adb logcat > d:/1.txt  然后运行APP,关闭APP,到D盘查找文件1,Ctrl+F,输入LAUNCHER,定位启动类,如下图所示位置 即为,eclipse调用A ...

  9. gitlab一次代码回滚引起的bug...

    问题描述:线上问题有一个bug,挺严重的.在线下排查后发现是一个之前的同事添加的代码影响的,为了不影响之前的业务,代码回滚了. 但是 过了几天,测人人员测试之后说这个问题又复现了,然后再次看,发现还是 ...

  10. Mycat中间件

    数据库中间件Mycat自我介绍 一.mycat概述 1.功能介绍 mycat一个开源的分布式数据库系统,是一个实现了mysql协议的server前端用户可以把它看成一个数据库代理,用mysql客户端工 ...