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)执行效果
浏览器:
生成文件:
文件内容:
来源:https://blog.csdn.net/wjg8209/article/details/119906700
猜你喜欢
- 最近看spring的JDBCTemplete的模板方式调用时,对模板和回调产生了浓厚兴趣,查询了一些资料,做一些总结。回调函数:所谓回调,就
- 1:设置注释的模板:下载此模板:codetemplates.xml搜索Dangzhang,将其改为你自己的姓名,保存打开eclipse/my
- 我们在使用SpringData JPA框架时,进行条件查询,如果是固定条件的查询,我们可以使用符合框架规则的自定义方法以及@Query注解实
- 本文实例讲述了C#简单实现SNMP的方法。分享给大家供大家参考。具体如下:/**C# Network Programming by Rich
- Android之ImageSwitcher的实例详解一. 简单示例实例代码:public class AndroidUIActivity e
- 安装 小试记一次使用arthas排查jvm中CPU占用过高问题。这工具 * 爆了 碾压我目前使用的全部JVM工具。curl -O https:/
- 现如今打开一个 App,比如头条、微博,都会有长列表,随着我们不断地滑动,视窗内的内容也会不断地更新。今天就用 Flutter 实现一下这种
- 一、说明 添加视图文件的时候有两种方式:1、通过在xml文件定义layout;2、java代码编写二、前言说明1.构造xml文件2.Layo
- IM SDK API 概述 https://cloud.tencent.com/document/product/269/33543///
- Java中java.io包为我们提供了输入流和输出流,对文件的读写基本上都依赖于这些封装好的关于流的类中来实现。前段时间遇到了以下两种需求:
- Android 滑动监听的实例详解摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动&
- 一、引言在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文
- Get请求1.简单发送Get请求/// <summary>/// 指定Url地址使用Get 方式获取全部字符串/// </
- springboot 配置服务代理有时候,我们可能有下边这样的需求:即,针对于分布式服务,我们会有多种业务接口服务,但是服务器上可能只要求开
- InterProcessMutex内部实现了zookeeper分布式锁的机制,所以接下来我们尝试使用这个工具来为我们的业务加上分布式锁处理的
- 单个和批量定义别名typeAliases使用Mybatis的别名typeAliases可以在xml文件里非常方便的使用类,而不需要写出这个类
- 本文实例分享了Android获取手机系统版本等信息的方法,供大家参考,具体内容如下:第一种代码:String phoneInfo = &qu
- 1.新建文件上传页面在static目录中新建upload-test.html,上传页面代码如下所示:<!DOCTYPE html>
- spring Boot 熟悉后,集成一个外部扩展是一件很容易的事,集成Redis也很简单,看下面步骤配置:一、添加pom依赖
- 本文研究的主要是Flask实现异步非阻塞请求功能,具体实现如下。最近做物联网项目的时候需要搭建一个异步非阻塞的HTTP服务器,经过查找资料,