我们有时候需要在运行时,动态创建日志文件,特别是文件名根据某些参数决定。这种方式只能通过编程方式来实现。
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>
相关推荐
【logback日志级别动态切换】是Java应用中常见的需求,尤其在大型分布式系统中,为了应对不同的运行环境和性能优化,需要灵活调整日志输出级别。本文将介绍一种使用Java ASM库实现的终极解决方案。 首先,理解...
- **SiftingAppender**:这是一种特殊类型的 Appender,可以根据某些条件(如 MDC 键值对)创建多个日志文件,从而实现动态配置。 ### 3. 示例源码分析 在提供的压缩包 "dynamic-logback" 中,我们可以找到以下...
本文将深入探讨如何在运行时动态修改 Logback 的日志级别,这对于在生产环境中排查问题非常有用。 在生产环境中,通常我们会设置日志级别为 INFO 或以上,以减少不必要的日志输出,节省存储空间。然而,当遇到特定...
此外,Logback支持多种日志Appender,比如RollingFileAppender可以实现日志文件的自动滚动,而SiftingAppender可以根据MDC(Mapped Diagnostic Context)值动态创建日志文件。 为了在代码中使用Logback,我们可以...
在上述代码中,当Spring Boot应用运行在“dev”配置环境中时,日志级别为`debug`,其他环境为`info`。 通过上述介绍,我们可以看出Spring Boot与Logback的集成使得日志管理变得简单而强大。开发者可以根据需求定制...
3. 动态配置:logback提供动态配置功能,可以通过JMX(Java Management Extensions)接口在运行时调整日志级别,无需重启应用。 4. 分级日志记录:logback支持基于类、包或MDC(Mapped Diagnostic Context)的精细...
1. 引入了属性文件`logging.path`,以便动态设置日志文件路径。 2. 定义了一个控制台输出的`ConsoleAppender`,并设置了日志格式。 3. 创建了一个文件输出的`FileAppender`,指定日志文件位置,并使用相同的日志格式...
Logback是Java平台上的一种高效、灵活的日志框架,由Ceki Gülcü创建,他是log4j项目的创始人。Logback旨在替代log4j,提供更快的速度和更低的内存消耗,同时保持与log4j的API兼容性,使得迁移更为便捷。 **1. ...
此外,Logback还提供了动态配置的能力,可以通过JMX(Java Management Extensions)或者监听`logback.xml`文件的改动来实时更新配置,使得在运行时调整日志级别变得可能,这对于生产环境的监控和调试非常实用。...
此外,Logback还支持日志级别的动态调整,例如通过JMX(Java Management Extensions)或者在运行时修改配置文件。这使得在生产环境中可以根据需要调整日志输出的详细程度,平衡调试需求与性能消耗。 SLF4J+Logback...
4. **SiftAppender**: 这是一个特殊的 Appender,可以根据 MDC(Mapped Diagnostic Context)变量值动态创建日志文件,非常适合多用户或多环境的场景。 5. **Layouts(布局)**: 布局决定了日志事件的输出格式,如 ...
此外,还可以配置日志文件的滚动策略,例如每天生成一个新的日志文件,或者当文件大小达到一定限制时滚动。 **滚动日志**功能允许你管理日志文件的大小和数量,防止日志文件无限制增长。Logback提供了...
在运行时,你可以通过JMX(Java Management Extensions)或者Spring Boot Actuator的端点来改变日志级别。 在实际开发中,我们通常会根据不同的环境(如开发、测试、生产)配置不同的日志级别。Spring Boot允许我们...
- **JMX (Java Management Extensions)**:Logback 支持通过 JMX 进行动态配置,可以在运行时调整日志设置。 **示例配置**: ```xml <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> ...
在IT行业中,日志文件配置是一项至关重要的任务,它能够帮助开发者追踪系统运行状态、调试错误和优化性能。本文将详细讲解如何使用DOM4J这一强大的XML处理库来配置日志系统,以满足技术文档中的具体要求。 DOM4J是...
在我们的需求中,我们需要为每一天创建一个单独的日志文件,所以需要为每一天定义一个Appender。Appender可以通过`<appender>`标签进行配置,例如: ```properties log4j.appender.dailyFileAppender=org.apache....
2. **日志归档**:通过配置`rollingPolicy`,可以自动滚动和归档日志文件,例如按日期、大小等条件。 3. **日志级别动态调整**:在生产环境中,可以根据需要动态调整日志级别,无需重启应用。 总的来说,logback...
《运行时动态日志等级开关:LogLevelSwitch》 在IT行业中,日志是排查和诊断问题的重要工具。然而,过多的日志输出会增加系统的负担,甚至可能导致系统性能下降。为了解决这一矛盾,一个名为“LogLevelSwitch”的...
8. **日志滚动策略**: 可以配置 `TimeBasedRollingPolicy` 或 `SizeBasedRollingPolicy` 来实现日志文件的滚动,比如每天创建一个新的日志文件,或者当文件大小达到某个阈值时滚动。 9. **SLF4J(Simple Logging ...
在这个配置中,我们定义了一个名为`FILE`的滚动文件输出appender,它将日志输出到指定的文件,并按照日期进行滚动,保留最近30天的日志文件。 在实际应用中,我们可以根据需要调整日志级别(如`DEBUG`、`WARN`等)...