Log4j2实现不同线程不同级别日志输出到不同的文件中
来源:互联网 发布:中国药科大学网络教育 编辑:程序博客网 时间:2024/05/16 08:33
Log4j2实现不同线程不同级别日志输出到不同的文件中
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?><configuration status="OFF"> <appenders> <Routing name="Routing"> <Routes pattern="$${ctx:ROUTINGKEY}"> <!-- This route is chosen if ThreadContext has value 'special' for key ROUTINGKEY. --> <Route key="special"> <RollingFile name="Rolling-${ctx:ROUTINGKEY}" fileName="logs/special-${ctx:ROUTINGKEY}.log" filePattern="./logs/${date:yyyy-MM}/${ctx:ROUTINGKEY}-special-%d{yyyy-MM-dd}-%i.log.gz"> <PatternLayout> <Pattern>%d{ISO8601} [%t] %p %c{3} - %m%n</Pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="6" modulate="true"/> <SizeBasedTriggeringPolicy size="10 MB"/> </Policies> </RollingFile> </Route> <!-- This route is chosen if ThreadContext has no value for key ROUTINGKEY. --> <Route key="$${ctx:ROUTINGKEY}"> <RollingFile name="Rolling-default" fileName="logs/default.log" filePattern="./logs/${date:yyyy-MM}/default-%d{yyyy-MM-dd}-%i.log.gz"> <PatternLayout> <pattern>%d{ISO8601} [%t] %p %c{3} - %m%n</pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="6" modulate="true"/> <SizeBasedTriggeringPolicy size="10 MB"/> </Policies> </RollingFile> </Route> <!-- This route is chosen if ThreadContext has a value for ROUTINGKEY (other than the value 'special' which had its own route above). The value dynamically determines the name of the log file. --> <Route> <RollingFile name="Rolling-${ctx:ROUTINGKEY}" fileName="logs/other-${ctx:ROUTINGKEY}.log" filePattern="./logs/${date:yyyy-MM}/${ctx:ROUTINGKEY}-other-%d{yyyy-MM-dd}-%i.log.gz" append = "false"> <PatternLayout> <pattern>%d{ISO8601} [%t] %p %c{3} - %m%n</pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="6" modulate="true"/> <SizeBasedTriggeringPolicy size="10 MB"/> </Policies> </RollingFile> </Route> </Routes> </Routing> <!-- <Async name="async" bufferSize="1000" includeLocation="true"> <AppenderRef ref="Routing"/> </Async>--> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <File name="ERRORFile" fileName="logs/error.log"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} [%t] %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 <RollingFile name="RollingFile" fileName="logs/app1.log" filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <SizeBasedTriggeringPolicy size="50MB"/> </RollingFile>--> </appenders> <loggers> <!--我们只让这个logger输出trace信息,其他的都是error级别--> <!-- additivity开启的话,由于这个logger也是满足root的,所以会被打印两遍。 不过root logger 的level是error,为什么Bar 里面的trace信息也被打印两遍呢 --> <logger name="common" level="trace" additivity="false"> <appender-ref ref="Console"/> <!-- <appender-ref ref="ERRORFile"/>--> <appenderRef ref="Routing"/> </logger> <root level="error"> <AppenderRef ref="Console"/> <appenderRef ref="Routing"/> </root> </loggers></configuration>
package common;import org.apache.logging.log4j.Level;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;public class Hello { static final Logger logger = LogManager.getLogger(Hello.class.getName()); public boolean hello() { logger.trace("enter"); //trace级别的信息,单独列出来是希望你在某个方法或者程序逻辑开始的时候调用,和logger.trace("entry")基本一个意思 logger.error("Did it again!"); //error级别的信息,参数就是你输出的信息 logger.info("我是info信息"); //info级别的信息 logger.debug("我是debug信息"); logger.warn("我是warn信息"); logger.fatal("我是fatal信息"); logger.log(Level.DEBUG, "我是debug信息"); //这个就是制定Level类型的调用:谁闲着没事调用这个,也不一定哦! logger.trace("exit"); //和entry()对应的结束方法,和logger.trace("exit");一个意思 return false; } public static void main(String[] args) { Hello h = new Hello(); h.hello(); }}
package common;import org.apache.logging.log4j.Level;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;public class Hello2 { static final Logger logger = LogManager.getLogger(Hello2.class.getName()); public boolean hello2() { logger.trace("enter"); //trace级别的信息,单独列出来是希望你在某个方法或者程序逻辑开始的时候调用,和logger.trace("entry")基本一个意思 logger.error("Did it again!"); //error级别的信息,参数就是你输出的信息 logger.info("我是info信息"); //info级别的信息 logger.debug("我是debug信息"); logger.warn("我是warn信息"); logger.fatal("我是fatal信息"); logger.log(Level.DEBUG, "我是debug信息"); //这个就是制定Level类型的调用:谁闲着没事调用这个,也不一定哦! logger.trace("exit"); //和entry()对应的结束方法,和logger.trace("exit");一个意思 return false; }}
package service;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.ThreadContext;import org.apache.logging.log4j.core.Appender;import org.apache.logging.log4j.core.Logger;import org.apache.logging.log4j.core.layout.PatternLayout;import common.Hello;import common.Hello2;public class ThreadLog implements Runnable { public void run() { ThreadContext.put("ROUTINGKEY", Thread.currentThread().getName());; Hello h = new Hello(); Hello2 h2 = new Hello2(); h.hello(); h2.hello2(); ThreadContext.remove("ROUTINGKEY"); }}
package service;import java.io.File;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.ThreadContext;import org.apache.logging.log4j.core.LoggerContext;public class TestLoger { public static void main(String[] args) {// LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);// File file = new File("log4j2.xml");// loggerContext.setConfigLocation(file.toURI()); for(int i=0;i< 10; i++){ ThreadLog log = new ThreadLog(); Thread t = new Thread(log); t.start(); } }}[Log4j2实现不同线程不同级别日志输出到不同的文件中](http://www.codepub.cn/2016/12/18/Log4j2-to-achieve-different-levels-of-different-threads-log-output-to-a-different-file/)
阅读全文
0 0
- Log4j2实现不同线程不同级别日志输出到不同的文件中
- 关于log4j2的重新加载,以及不同级别日志输出到不同日志文件
- 关于log4j2的重新加载,以及不同级别日志输出到不同日志文件
- 关于log4j2的重新加载,以及不同级别日志输出到不同日志文件
- 关于log4j2的重新加载,以及不同级别日志输出到不同日志文件
- log4j2的重新加载及不同级别日志输出到不同日志文件
- log4j2 按照日志级别将日志输出到不同的文件
- log4j不同的日志输出到不同的文件中
- Log4j按级别输出日志到不同的文件
- Log4j按级别输出日志到不同的文件
- Log4j按级别输出日志到不同的文件
- Log4j按级别输出日志到不同的文件
- Log4j2 日志分级别输出到不同文件
- log4net按照不同的【LEVEL】级别输出到不同文件
- log4net按照不同的【LEVEL】级别输出到不同文件
- Log4j按级别输出日志到不同文件配置分析
- Log4j按级别输出日志到不同文件配置分析
- Log4j按级别输出日志到不同文件
- Java Filter过滤机制详解与监听器详解
- Zookeeper原理架构
- 【Quartz】深入Job、JobDetail、JobDataMap、Trigger
- zabbix 报错
- Windows系统alt+数字键 的特殊字符集
- Log4j2实现不同线程不同级别日志输出到不同的文件中
- POJ
- 【Quartz】Spring3.2.9+Quqrtz2.2.1实现定时实例
- Leo_CT's Box
- webshell
- 基于Spring task注解方式配置任务
- opencv2.4.9+VS2013中imread和cvLoadimage的使用区别
- Matlab函数meshgrid的作用
- 如何在app中打开支付宝进行打赏开发者