我们有时候需要在运行时,动态创建日志文件,特别是文件名根据某些参数决定。这种方式只能通过编程方式来实现。
1、JAVA代码样例
import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.core.rolling.RollingFileAppender; import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy; import ch.qos.logback.core.util.FileSize; import ch.qos.logback.core.util.OptionHelper; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.slf4j.LoggerFactory; import org.slf4j.MDC; public class LoggerBuilder { private static final Map<String,Logger> container = new HashMap<>(); public static Logger getLogger(String name) { Logger logger = container.get(name); if(logger != null) { return logger; } synchronized (LoggerBuilder.class) { logger = container.get(name); if(logger != null) { return logger; } logger = build(name); container.put(name,logger); } return logger; } private static Logger build(String name) { LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); Logger logger = context.getLogger("FILE-" + name); logger.setAdditive(false); RollingFileAppender appender = new RollingFileAppender(); appender.setContext(context); appender.setName("FILE-" + name); appender.setFile(OptionHelper.substVars("${LOG_HOME}/web-log-" + name + ".log",context)); appender.setAppend(true); appender.setPrudent(false); SizeAndTimeBasedRollingPolicy policy = new SizeAndTimeBasedRollingPolicy(); String fp = OptionHelper.substVars("${LOG_HOME}/web-log-" + name + ".log.%d{yyyy-MM-dd}.%i",context); policy.setMaxFileSize(FileSize.valueOf("128MB")); policy.setFileNamePattern(fp); policy.setMaxHistory(15); policy.setTotalSizeCap(FileSize.valueOf("32GB")); policy.setParent(appender); policy.setContext(context); policy.start(); PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setContext(context); encoder.setPattern("%d{yyyy-MM-dd/HH:mm:ss.SSS}|%X{localIp}|[%t] %-5level %logger{50} %line - %m%n"); encoder.start(); appender.setRollingPolicy(policy); appender.setEncoder(encoder); appender.start(); logger.addAppender(appender); return logger; } }
2、配置
需要注意,我们通常在日志文件路径上使用使用一些系统变量(比如${catalina.base})、或者logback.xml配置的properties;此时我们可以使用OptionHelper辅助类来替换String中的变量占位符,此外LoggerContext中包含logback.xml配置的properties。不过这些properties默认上下文Scope为“local”,如果想让它们能够被LoggerContext访问,需要强制设置为“context”,这不会引入问题。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property scope="context" name="LOG_HOME" value="${catalina.base}/logs"/> ... </configuration>
相关推荐
springboot+logback输出日志文件1
logback+slf4j 异步日志输出到不同级别的文件-配置文件,下载即可使用。结合lombok【@slf4j】即可方便愉快的输出日志了 666
关闭HttpClient日志的logback文件
异步输出日志的原理 ...如果将所有日志都存储在一个文件中,文件大小也随着应用的运行越来越大并且不好排查问题,正确的做法应该是将error日志和其他日志分开,并且不同级别的日志根据时间段进行记录存储。
Logback-log-level-control作者:ryan.kong(Kong政)日期:2015-09-24目录说明使用1、说明本插件用于在运行时调整Logback日志级别2、使用在项目中引入Logback-log-level-control.jar包即可,不需要额外的配置2.1、...
内置三个jar包 一个配置文件 logback.txt logback-classic-1.2.3.jar logback-core-1.2.3.jar slf4j-api-1.7.26.jar
LogBack配置文件,主要包括LOGBack的配置文件内容
资源是logback-prod生产环境的日志配置和打印方式,以下内容仅供自己学习和使用!请勿用作商业用途!
springboot 日志配置文件 logback 它当前分为以下三个模块: logback-core:其它两个模块的基础模块。 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如...
分享的文件包括Logback的相关jar包和核心配置文件。 Logback是由log4j创始人设计的另一个开源日志组件,基于slf4j的日志规范实现的框架,性能比log4j要好。 Logback主要分为三个技术模块: logback-core:该模块为...
该压缩包包含 logback类库所包含的jar包以及logback.xml配置文件(放到 src 目录),用于开发学习使用。
该配置使日志先按日期进行归类,然后按大小输出异步日志
Servlet for Logback在运行时配置日志级别。 特征 在运行时更改每个记录器的Logback级别 从初始logback.xml将级别重置为其默认值 按名称或级别对记录器进行排序 按名称过滤记录器 用法 将文件放入您的项目中,并将...
使用logback-spring.xml的日志打印输出demo
logback日志的jar包和配置介绍:logback-classic-1.1.2.jar、logback-core-1.1.2.jar、slf4j-api-1.7.7.jar、logback.xml、rsframework.properties
每次日志输出到文件都会进行一次磁盘IO,在多应用的时候这种效果会导致一定的线程运行延迟,所以可以采用异步的方式处理。 采用异步写日志的方式,通过不让主线程去写日志文件而减少磁盘IO,避免并发下造成线程阻塞...
日志文件配置,logback
springboot项目,使用logback保存日志到数据库,非自增主键id,insert使用的是UUID
主要介绍了Logback动态修改日志级别的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
logback日志写logstash配置appender参考