`
QING____
  • 浏览: 2253314 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

logback运行时动态创建日志文件

    博客分类:
  • JAVA
 
阅读更多

    我们有时候需要在运行时,动态创建日志文件,特别是文件名根据某些参数决定。这种方式只能通过编程方式来实现。

 

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 ASM使用).doc

    【logback日志级别动态切换】是Java应用中常见的需求,尤其在大型分布式系统中,为了应对不同的运行环境和性能优化,需要灵活调整日志输出级别。本文将介绍一种使用Java ASM库实现的终极解决方案。 首先,理解...

    logback动态日志配置 - 示例源码

    - **SiftingAppender**:这是一种特殊类型的 Appender,可以根据某些条件(如 MDC 键值对)创建多个日志文件,从而实现动态配置。 ### 3. 示例源码分析 在提供的压缩包 "dynamic-logback" 中,我们可以找到以下...

    Logback动态修改日志级别的方法

    本文将深入探讨如何在运行时动态修改 Logback 的日志级别,这对于在生产环境中排查问题非常有用。 在生产环境中,通常我们会设置日志级别为 INFO 或以上,以减少不必要的日志输出,节省存储空间。然而,当遇到特定...

    springboot整合日志管理Logback.zip

    此外,Logback支持多种日志Appender,比如RollingFileAppender可以实现日志文件的自动滚动,而SiftingAppender可以根据MDC(Mapped Diagnostic Context)值动态创建日志文件。 为了在代码中使用Logback,我们可以...

    SpringBoot Logback配置,SpringBoot日志配置

    在上述代码中,当Spring Boot应用运行在“dev”配置环境中时,日志级别为`debug`,其他环境为`info`。 通过上述介绍,我们可以看出Spring Boot与Logback的集成使得日志管理变得简单而强大。开发者可以根据需求定制...

    10 reasons to use logback !------log4j他爹告诉你为何要使用新的日志包logback

    3. 动态配置:logback提供动态配置功能,可以通过JMX(Java Management Extensions)接口在运行时调整日志级别,无需重启应用。 4. 分级日志记录:logback支持基于类、包或MDC(Mapped Diagnostic Context)的精细...

    Spring Boot异步输出Logback日志方法详解

    1. 引入了属性文件`logging.path`,以便动态设置日志文件路径。 2. 定义了一个控制台输出的`ConsoleAppender`,并设置了日志格式。 3. 创建了一个文件输出的`FileAppender`,指定日志文件位置,并使用相同的日志格式...

    logback日志工具

    Logback是Java平台上的一种高效、灵活的日志框架,由Ceki Gülcü创建,他是log4j项目的创始人。Logback旨在替代log4j,提供更快的速度和更低的内存消耗,同时保持与log4j的API兼容性,使得迁移更为便捷。 **1. ...

    Java的日志配置文件 logback.xml

    此外,Logback还提供了动态配置的能力,可以通过JMX(Java Management Extensions)或者监听`logback.xml`文件的改动来实时更新配置,使得在运行时调整日志级别变得可能,这对于生产环境的监控和调试非常实用。...

    调试日志之slf4j+logback

    此外,Logback还支持日志级别的动态调整,例如通过JMX(Java Management Extensions)或者在运行时修改配置文件。这使得在生产环境中可以根据需要调整日志输出的详细程度,平衡调试需求与性能消耗。 SLF4J+Logback...

    logback开发文档

    4. **SiftAppender**: 这是一个特殊的 Appender,可以根据 MDC(Mapped Diagnostic Context)变量值动态创建日志文件,非常适合多用户或多环境的场景。 5. **Layouts(布局)**: 布局决定了日志事件的输出格式,如 ...

    logback日志文档-入门到SpringBoot中使用

    此外,还可以配置日志文件的滚动策略,例如每天生成一个新的日志文件,或者当文件大小达到一定限制时滚动。 **滚动日志**功能允许你管理日志文件的大小和数量,防止日志文件无限制增长。Logback提供了...

    spring-logback日志项目模块

    在运行时,你可以通过JMX(Java Management Extensions)或者Spring Boot Actuator的端点来改变日志级别。 在实际开发中,我们通常会根据不同的环境(如开发、测试、生产)配置不同的日志级别。Spring Boot允许我们...

    LogBack.zip

    - **JMX (Java Management Extensions)**:Logback 支持通过 JMX 进行动态配置,可以在运行时调整日志设置。 **示例配置**: ```xml &lt;appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"&gt; ...

    日志文件配置

    在IT行业中,日志文件配置是一项至关重要的任务,它能够帮助开发者追踪系统运行状态、调试错误和优化性能。本文将详细讲解如何使用DOM4J这一强大的XML处理库来配置日志系统,以满足技术文档中的具体要求。 DOM4J是...

    log4j 写多个日志文件,按照日期每天都记

    在我们的需求中,我们需要为每一天创建一个单独的日志文件,所以需要为每一天定义一个Appender。Appender可以通过`&lt;appender&gt;`标签进行配置,例如: ```properties log4j.appender.dailyFileAppender=org.apache....

    Java异常日志捕获jar包logback

    2. **日志归档**:通过配置`rollingPolicy`,可以自动滚动和归档日志文件,例如按日期、大小等条件。 3. **日志级别动态调整**:在生产环境中,可以根据需要动态调整日志级别,无需重启应用。 总的来说,logback...

    写了个开源小中间件——运行时动态日志等级开关.doc

    《运行时动态日志等级开关:LogLevelSwitch》 在IT行业中,日志是排查和诊断问题的重要工具。然而,过多的日志输出会增加系统的负担,甚至可能导致系统性能下降。为了解决这一矛盾,一个名为“LogLevelSwitch”的...

    logback 使用

    8. **日志滚动策略**: 可以配置 `TimeBasedRollingPolicy` 或 `SizeBasedRollingPolicy` 来实现日志文件的滚动,比如每天创建一个新的日志文件,或者当文件大小达到某个阈值时滚动。 9. **SLF4J(Simple Logging ...

    Spring Boot SLF4J日志实例 / Logback

    在这个配置中,我们定义了一个名为`FILE`的滚动文件输出appender,它将日志输出到指定的文件,并按照日期进行滚动,保留最近30天的日志文件。 在实际应用中,我们可以根据需要调整日志级别(如`DEBUG`、`WARN`等)...

Global site tag (gtag.js) - Google Analytics