zoukankan      html  css  js  c++  java
  • 再议java日志管理logback

    1、问题描述

    关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。

    2、解决方案

    这次其实是碰到了一个问题,一般的情况是,会单独在linux上创建个用户,线上和开发环境一样,这样脚本中假如有相对目录的话,也能保持一致,但是这次因为线上环境创建其他用户有问题,只能用root用户操作,导致logback定义的目录,开发和线上不一致,线上是root/***,开发环境没有权限访问该目录(开发环境使用的普通用户),所以logback的目录,需要配置化,但是无法从application中获取,换了个方式解决的,记录下。

    2.1 配置

    <?xml version="1.0" encoding="UTF-8"?>
    
    <configuration>
        <springProperty scope="context" name="LOG_HOME" source="path.log"/>
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
        </appender>
        <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${LOG_HOME}/laowangtest.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
                <MaxHistory>30</MaxHistory>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <MaxFileSize>1kb</MaxFileSize>
    <!--                <MaxFileSize>5MB</MaxFileSize>- -->
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
        </root>
    
    </configuration>
    

    简要说明

    1、目录配置化

     <springProperty scope="context" name="LOG_HOME" source="path.log"/>
    

    其中application.yml中配置是这样的:

    path:
      log: e:/laowang/test
    

    实际项目中还有另外的配置文件:application-dev.yml、application-test.yml、application-prod.yml,path.log是配置在每个文件中,每个里面的值不一样,而不是配置在公共配置application.yml中,这样根据打包规则就能获取不同的日志目录了。

    另外至于为什么无法通过${}方式获取值,网上或者官方给的答案是,在容器中,logback先与application.yml加载了,所以通过${}方式就拿不到值了;同时保险起见,将logback.xml文件名称更改为logback-***.xml,例如:logback-spring.xml。

    2、简单介绍下目前的配置

    配置了两个Appender,一个打印到控制台,一个是到文件,以前把文件按照info、warn、errro,根据日志级别区分了打印文件,现在感觉没必要,就打印一个里面去,还按照以前方式滚动,首先按天,其次按大小滚动日志

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${LOG_HOME}/laowangtest.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
                <MaxHistory>30</MaxHistory>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <MaxFileSize>1kb</MaxFileSize>
    <!--                <MaxFileSize>5MB</MaxFileSize>- -->
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
    

    其中几个参数:

    (1)FileNamePattern,文件目录;

    (2)MaxHistory:日志保留天数;

    (3)MaxFileSize:多大开始滚动(新增)日志,记得是5MB,后面还有B不要漏掉了。

    2.2 效果

    为了展示效果,把大小给成1kb滚动,弄个测试方法进行验证

    (1)测试方法

    @Api(value = "test")
    @RestController
    public class TestController {
        Logger logger = LoggerFactory.getLogger(TestController. class);
    
        @RequestMapping(value ="/logTest")
        @ResponseBody
        public  String logTest() {
            logger.info("老王是帅哥老王是帅哥老王是帅哥");
            return "老王是帅哥!";
        }
    }
    

    (2)执行效果

    浏览器

    生成文件

    文件内容:


    更多信息请关注公众号:「软件老王」,关注不迷路,软件老王和他的IT朋友们,分享一些他们的技术见解和生活故事。

    更多信息请关注公众号:「软件老王」,关注不迷路,IT技术与相关干货分享,回复关键字获取对应干货,本文版权归作者软件老王所有,转载需注明作者、超链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Python class static methods
    学习MySQL出现问题Not allowed to return a result set from a t
    MySQL创样例表(MySQL必知必会B.2)
    无重复字符的最长字串(C++,python实现)
    softmax详解
    为什么要使用logistic函数
    两个栈实现队列的插入和删除(C++实现)
    用数组实现队列(C++)
    C++ memset函数
    两数之和(C++实现)
  • 原文地址:https://www.cnblogs.com/ruanjianlaowang/p/15183985.html
Copyright © 2011-2022 走看看