logback实现每个用户一个独立的日志文件
来源:互联网 发布:软件服务器的作用 编辑:程序博客网 时间:2024/06/05 07:46
本文介绍如何使用logback的Mapped Diagnostic Context (MDC)
和SiftingAppender
实现每个线程一个独立的日志文件。
MDC 参考手册http://logback.qos.ch/manual/mdc.html
1、logback.xml配置文件示例
<configuration><property name="LOG_HOME" value="/home/logs/hawkeye/"/><property name="SERIOUS_PATTERN" value="[%d{yyyyMMdd HH:mm:ss.SSS}][%thread]%5level- %msg%n "/><!-- %X{ip} --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${SERIOUS_PATTERN}</pattern></encoder></appender><appender name="Async_Console" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>256</queueSize><appender-ref ref="STDOUT" /></appender><!-- SiftingAppender实现每个线程一个独立的日志文件 --><appender name="Async_FileLog" class="ch.qos.logback.classic.sift.SiftingAppender"><discriminator> <key>application.name</key> <defaultValue>service</defaultValue> </discriminator> <sift> <appender name="FileLog" 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><file>${LOG_HOME}/${application.name}/applog/service-info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}/${application.name}/applog/%d{yyyyMMdd}/service-info.%d{yyyyMMdd}.%i.log</fileNamePattern><maxHistory>7</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>200MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><pattern>${SERIOUS_PATTERN}</pattern></encoder></appender></sift></appender><logger name="com.hualala"><level value="debug" /><appender-ref ref="Async_Console" /><appender-ref ref="Async_FileLog" /></logger></configuration>
2.java线程代码示例
此处通过简单的MDC put与remove来实现每个线程log文件名独立。
package com.yangyi;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.slf4j.MDC;/** * Created by yangjinfeng02 on 2016/6/4. */public class Counter implements Runnable { private Logger logger = LoggerFactory.getLogger(Counter.class); private String counterName; public Counter(String counterName) { this.counterName = counterName; } public void run() { MDC.put("application.name", counterName); logger.info("start counter {}", counterName); MDC.remove("application.name"); }}
package com.yangyi;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by yangjinfeng02 on 2016/6/4. */public class Application { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(5); for (int i = 0; i < 10; ++i) { executorService.execute(new Counter(String.valueOf(i))); } executorService.shutdown(); }}
PS:利用logback的MDC特性,实际项目中,可以实现按请求url、用户、host等粒度进行日志文件的独立分隔。,如web项目中,可通过拦截器将session id注入到MDC,实现按session分隔日志,或者简单的将session呈现到log信息中。
阅读全文
0 0
- logback实现每个用户一个独立的日志文件
- logback实现每个线程一个独立的日志文件
- 每个用户做独立的线程同步
- log4j实现每个线程保存一个日志文件
- log4j实现每个线程保存一个日志文件
- Android用tabhost实现 界面切换,每个界面为一个独立的activity
- laravel日志每个类型一个文件
- logback + spring + maven 日志的实现
- 日志文件logback
- logback配置日志文件
- logback.xml日志文件
- logback 日志文件配置
- logback 参考官方文档 实现控制台与文件输出日志的 最基本配置
- struts为每个独立请求创建一个Action的方法
- 使用logback.xml配置来实现日志文件输出
- 使用logback.xml配置来实现日志文件输出
- slf4j+logback实现日志存放到不同文件
- logback配置日志文件位置
- oracle数据库获取表的列名以及列名的注释,并按表中字段原来的顺序显示
- Jxls+Spring MVC实现Excel导出
- 每日一题:Two Sum
- Cento7下安装svn
- orcal学习笔记
- logback实现每个用户一个独立的日志文件
- Putty的ppk文件转成Xshell使用的key文件
- Mysql报错5002
- Android Studio使用jni简记
- T-SQL查询进阶--详解公用表表达式(CTE)
- html5移动端input file可进行拍照和选择图片
- C++——【USACO 4.1.1】——Beef McNuggets
- JSP中EL表达式的比较符号、字符串比较
- 文章标题