JAVAlogback日志管理详解

作者:软件老王 时间:2023-01-11 22:33:54 

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中,这样根据打包规则就能获取不同的日志目录了。

另外至于为什么无法通过 方 式 获 取 值 , 网 上 或 者 官 方 给 的 答 案 是 , 在 容 器 中 , l o g b a c k 先 与 a p p l i c a t i o n . y m l 加 载 了 , 所 以 通 过 {}方式获取值,网上或者官方给的答案是,在容器中,logback先与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)执行效果

浏览器:

JAVAlogback日志管理详解

生成文件:

JAVAlogback日志管理详解

文件内容:

JAVAlogback日志管理详解

来源:https://blog.csdn.net/wjg8209/article/details/119906700

标签:JAVA,logback,日志
0
投稿

猜你喜欢

  • mybatis使用collection嵌套查询的实现

    2021-07-06 22:04:58
  • 详解java nio中的select和channel

    2021-08-09 19:17:39
  • Mybatis控制台打印SQL语句的两种方式实现

    2023-06-23 14:24:57
  • android调用国家气象局天气预报接口json数据格式解释

    2022-09-16 21:08:24
  • C#中static静态变量的用法实例

    2022-12-16 07:47:44
  • Unity多屏幕设置的具体方案

    2023-12-12 12:05:24
  • java Iterator接口和LIstIterator接口分析

    2023-05-23 21:31:24
  • Android中方法数超限问题与启动优化详解

    2023-03-05 17:55:41
  • Mybatis模糊查询及自动映射实现详解

    2021-10-29 12:05:40
  • MybatisPlus多表连接查询的问题及解决方案

    2023-11-25 22:09:06
  • Android中TextView显示插入的图片实现方法

    2023-08-06 00:27:42
  • Android中使用GridView实现仿微信图片上传功能(附源代码)

    2023-11-27 02:01:25
  • SpringBoot实现过滤器拦截器的耗时对比

    2022-04-12 00:45:04
  • SpringBoot 转发请求至指定页面的操作方法

    2022-11-13 17:23:12
  • Mybatis-Plus-AutoGenerator 最详细使用方法

    2021-06-11 07:45:13
  • resty mail的简单发送邮件方法

    2021-09-15 06:00:14
  • java链式创建json对象的实现

    2023-11-12 12:36:51
  • Java中类的加载顺序剖析(常用于面试题)

    2022-07-26 16:10:48
  • Android Dialog 设置字体大小的具体方法

    2023-09-12 12:46:49
  • C#泛型语法详解

    2023-01-28 18:20:12
  • asp之家 软件编程 m.aspxhome.com