首页 > 其他分享 >【Log4j2】Log4j2最佳实践:Log4j2配置超过7天压缩,超过3个月删除文件的滚动日志,分别定义info文件和error文件,按照每小时存储

【Log4j2】Log4j2最佳实践:Log4j2配置超过7天压缩,超过3个月删除文件的滚动日志,分别定义info文件和error文件,按照每小时存储

时间:2024-01-02 12:35:31浏览次数:44  
标签:info 文件 配置文件 配置 application 使用 日志 Log4j2


目录

Log4j2配置

springboot多环境日志配置

参考资料


Log4j2配置

如果你想要在控制台输出美化的日志信息,你可以使用Log4j2的ConsoleAppender和AnsiColorConverter来实现。下面是相应的配置示例:

<Configuration status="WARN">
    <Properties>
        <Property name="logPath">/path/to/logs</Property>
    </Properties>

    <Appenders>
        <Routing name="RoutingAppender">
            <Routes pattern="$${ctx:loggerType}">
                <Route key="info" ref="InfoFileAppender">
                    <Filters>
                        <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                    </Filters>
                </Route>
                <Route key="error" ref="ErrorFileAppender">
                    <Filters>
                        <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
                    </Filters>
                </Route>
            </Routes>
        </Routing>

        <Console name="ConsoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=blue, TRACE=blue}" />
        </Console>

        <RollingFile name="InfoFileAppender" fileName="${logPath}/info.log"
                     filePattern="${logPath}/info-%d{yyyy-MM-dd-HH}.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
            <DefaultRolloverStrategy max="24">
                <Delete basePath="${logPath}">
                    <IfFileName glob="info-*.log" />
                    <IfLastModified age="7d" />
                </Delete>
            </DefaultRolloverStrategy>
            <Actions>
                <GZCompress>
                    <IfLastModified age="7d"/>
                </GZCompress>
            </Actions>
        </RollingFile>

        <RollingFile name="ErrorFileAppender" fileName="${logPath}/error.log"
                     filePattern="${logPath}/error-%d{yyyy-MM-dd-HH}.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
            <DefaultRolloverStrategy max="24">
                <Delete basePath="${logPath}">
                    <IfFileName glob="error-*.log" />
                    <IfLastModified age="7d" />
                </Delete>
            </DefaultRolloverStrategy>
            <Actions>
                <GZCompress>
                    <IfLastModified age="7d"/>
                </GZCompress>
            </Actions>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="RoutingAppender"/>
            <AppenderRef ref="ConsoleAppender"/>
        </Root>
    </Loggers>
</Configuration>

在这个配置中,我们定义了两个RollingFile appender,分别用于info日志和error日志。每个appender都有自己的文件名、文件模式、时间触发策略和滚动策略。同时,我们使用了DeleteAction来保持每个类型的日志文件在7天内,并使用GZCompressAction在满足条件后进行压缩。

使用RoutingAppender可以根据Logger的上下文信息将日志路由到不同的appender。在这个示例中,我们使用"loggerType"作为Routing key,并在Routes元素内定义了两个Route,分别将"info"和"error"路由到对应的appender。

最后,我们将RoutingAppender作为Root logger的Appender引用,以便所有日志都能正确路由到相应的appender。

请根据实际需求修改logPath配置属性,将日志存储在适当的位置。另外,你可以通过修改DeleteAction的条件来实现按照3个月删除文件的需求。例如,可以将<IfLastModified age="7d" />改为<IfLastModified age="90d" />

springboot多环境日志配置

在Spring Boot多环境下,可以为不同环境分别配置不同的Log4j2配置文件,使用Spring Boot提供的`logging.config`配置项指定当前环境下使用的Log4j2配置文件。

首先,在项目的resources目录下创建多个Log4j2配置文件,以application-{profile}.yml(或application-{profile}.properties)命名,其中{profile}为环境名称,如application-dev.yml、application-test.yml和application-prod.yml。

接着,在Spring Boot的配置文件(如application.yml)中,指定`logging.config`配置项的值为当前环境下使用的Log4j2配置文件路径。例如:

```yaml
 spring:
   profiles:
     active: dev
   application:
     name: myapp
   main:
     allow-bean-definition-overriding: true
   jackson:
     date-format: yyyy-MM-dd HH:mm:ss
     time-zone: GMT+8logging:
   config: classpath:log4j2-${spring.profiles.active}.xml
 ```

在上面的配置中,我们将`logging.config`配置项的值设置为`classpath:log4j2-${spring.profiles.active}.xml`,即使用当前激活的环境对应的Log4j2配置文件。这里使用了`${spring.profiles.active}`EL表达式获取当前激活的环境名称。

最后,在Log4j2配置文件中,可以使用`${sys:property}`获取系统属性,例如`${sys:logPath}`获取名为`logPath`的系统属性。也可以使用`${ctx:variableName}`获取Log4j2上下文变量。

例如,在Log4j2配置文件中,可以使用以下方式获取当前环境对应的配置项:

```xml
 <Configuration>
     <Properties>
         <Property name="logPath">${sys:logPath}</Property>
     </Properties>    <!-- 定义Appenders和Loggers -->
 </Configuration>
 ```

在上面的配置中,我们使用`${sys:logPath}`获取名为`logPath`的系统属性。

这样,就可以实现在Spring Boot多环境下使用Log4j2的配置了。

参考资料

log4j2 的使用【超详细图文】

log4j2 实际使用详解


标签:info,文件,配置文件,配置,application,使用,日志,Log4j2
From: https://blog.51cto.com/u_11579569/9067614

相关文章

  • 恢复删除的文件:掌握这些技巧,轻松找回丢失的数据
    现代社会中,数据的重要性不言而喻,随着科技的不断发展,我们的工作、生活和学习都越来越依赖电子设备。然而,高度数字化的时代,文件丢失问题时有发生。意外删除、格式化、系统崩溃等都可能导致重要文件丢失,给我们带来许多烦恼和损失。这种情况下,如果能掌握文件恢复方法,将可以及时挽救损失......
  • (06)将资源装进Res,就不用引用磁盘文件
    16*16各种格式ico图标下载链接:https://pan.baidu.com/s/1_Mt7AHfOKgrfOi4MNrxHrw提取码:w0u0//TrayIcon1.Icon.LoadFromFile('33.ico');等价于TrayIcon1.Icon.LoadFromResourceName(Hinstance,'33');//,就不用引用33.ico文件了 ......
  • 文件上传漏洞(四)edjpgcom
    简介edjpgcom是一个小工具,主要功能是在图片中插入一句话马或者小马,伪造的比较好。同时,edjpgcom还可以用于文件上传漏洞和文件包含漏洞的渗tou测试。需要注意的是,该软件仅供研究测试,严禁非法使用。edjpgcom是一个小工具,主要功能是在图片中插入一句话马或小马,从而实现伪造图片的目的......
  • 前端学习笔记202311学习笔记第一百贰拾肆天-nodejs-登录鉴权-文件上传9
    ......
  • Linux 挂载 Windows 共享文件夹 cifs
    Linux挂载Windows共享文件夹cifs一台Windows系统(192.168.1.10),创建一个共享文件夹share。Windows客户端访问路径就是:\\192.168.1.10\shareLinux下挂载方法如下(CentOS7):1).需要安装cifs-utils软件包yuminstall-ycifs-utils2).不管是开机自动挂载还是手动挂载,我们都首先在/mn......
  • mysql导入导出sql文件
    MySQL新版本无法使用-p密码形式,可以在my.cnf中设置账号密码导出备份命令如下:mysqldump--defaults-extra-file=/etc/my.cnf数据库名>database.sql一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1、导出数据和表结构:mysqldump-u用户名-p数据库名[表名......
  • [EFI]HP Spectre 13 电脑 Hackintosh 黑苹果efi引导文件
    硬件型号驱动情况主板HPSpectre13处理器IntelCorei7-7500U(7thgen-KabyLake)已驱动内存8GBLPDDR3-1866SDRAM已驱动硬盘512GBToshibaNVMe™M.2SSD已驱动显卡IntelHDGraphics620已驱动声卡ConexantCX8200(0x2008)已驱动网卡I1211GigabitEthernet已驱动无线......
  • 安卓期末大作业Android studio-记单词app(资源链接在文末,含注册登录,含设计报告,含导出ap
    安卓期末大作业Androidstudio-记单词app(注册登录、增删改查)1、注册登录界面2.用户点击加号按钮输入单词,键盘会自动弹出并焦点在输入框,用户输入英文和中文释义,单词本上将在最上面显示这个单词,并会有下拉动画。用户可以通过上方放回箭头取消输入。2.用户可以通过单词盘边的按钮来关......
  • 《2023安卓期末大作业-记事本app(可以登录,含完整源码+程序设计报告+运行视频+apk导出文
    2023安卓期末大作业-记事本app(可以登录,含完整源码+程序设计报告+运行视频+apk导出文件)打包文件如下图所示:基于Android系统的简单记事本,它能够便携记录生活和工作的诸多事情,从而帮助人们有条理的进行时间管理。一个记事本,能够输入标题和内容,创建日期、最新修改日期等信息。如果没......
  • JS 根据文件Magic Number判断文件是否是图片
    原理:检测文件的MagicNumber代码示例:varpngMagic=[0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a];varjpeg_jfif=[0x4a,0x46,0x49,0x46];varjpeg_exif=[0x45,0x78,0x69,0x66];varjpegMagic=[0xFF,0xD8,0xFF,0xE0];var......