JAVAlogback日志管理详解

目录
  • 1、问题描述
  • 2、解决方案
    • 2.1 配置
      • 简要说明
    • 2.2 效果
      • (1)测试方法
      • (2)执行效果
  • 总结

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)执行效果

浏览器:

生成文件:

文件内容:

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 浅谈Java springboot日志管理

    一.前言 springboot默认使用Logback组件作为日志管理.Logback是由log4j创始人设计的一个开源日志组件. 在springboot项目中我们不需要额外的添加Logback的依赖,因为在spring-boot-starter或者spring-boot-starter-web中已经包含了Logback的依赖 Logback读取配置文件的步骤 在classpath下查找文件logback-test.xml 如果文件不存在,则查找logback.xml 如果上面两个文件都不存在,L

  • Java logback日志的简单使用

    说明 logback作为log4j的替代,有很多优势.要将logback应用到项目中,步骤很简单.加入依赖的jar包和配置文件即可. logback.xml中主要元素: <property> 定义属性,定义之后,后文可以通过该变量引用. <appender> 定义日志输出格式.位置.文件分割等.被<logger>或<root>引用. <logger> 定义日志名称及对应的级别.name可以是包名.类名或者单纯的字符串.如果是包名或者类名,那么该包

  • Java日志框架之logback使用详解

    为什么使用logback 记得前几年工作的时候,公司使用的日志框架还是log4j,大约从16年中到现在,不管是我参与的别人已经搭建好的项目还是我自己主导的项目,日志框架基本都换成了logback,总结一下,logback大约有以下的一些优点: 内核重写.测试充分.初始化内存加载更小,这一切让logback性能和log4j相比有诸多倍的提升 logback非常自然地直接实现了slf4j,这个严格来说算不上优点,只是这样,再理解slf4j的前提下会很容易理解logback,也同时很容易用其他日志框架

  • 详解slf4j+logback在java工程中的配置

    本文主要介绍一下slf4j+logback在java工程中的配置,面向的读者主要是已经对slf4j+logback有一定了解的同学,但是在文章开头也做了一些知识铺垫,下面咱们进入正题. 在介绍slf4j+logback配置之前,首先对日志组件logback进行介绍. (一)日志组件logback的介绍及配置使用方法 一.logback的介绍     Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classi

  • JAVAlogback日志管理详解

    目录 1.问题描述 2.解决方案 2.1 配置 简要说明 2.2 效果 (1)测试方法 (2)执行效果 总结 1.问题描述 关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友. 2.解决方案 这次其实是碰到了一个问题,一般的情况是,会单独在linux上创建个用户,线上和开发环境一样,这样脚本中假如有相对目录的话,也能保持一致,但是这次因为线上环境创建其他用户有问题,只能用root用户操作,导致logback定义的目录,

  • SpringBoot利用AOP实现一个日志管理详解

    目录 1. 需求 2. 新建一张日志表 3. 写相应的Controller层 4.Service接口层 5.Service实现 6.Mapper接口 7.Mapper.xml(我用的是Mybatis) 8.CspLog 9.实体类SysOperCspLog 10. 定义日志管理的切面 11.AsyncFactoryCsp 12. 写一个Controller的Demo来执行一条日志试试 1. 需求 目前有这么个问题,有两个系统CSP和OMS,这俩系统共用的是同一套日志操作:Log;目前想区分下这俩

  • MySQL日志管理详解

    日志文件对于一个服务器来说是非常重要的,它记录着服务器的运行信息,许多操作都会写日到日志文件,通过日志文件可以监视服务器的运行状态及查看服务器的性能,还能对服务器进行排错与故障处理,MySQl中有六种不同类型的日志. 一.日志种类 ---–> 1,错误日志:记录启动.运行或停止时出现的问题,一般也会记录警告信息. ---–> 2,一般查询日志:记录建立的客户端连接和执行的语句. ---–> 3,慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询,

  • Node.js log4js日志管理详解

    前言 在Nodejs中使用express框架并没有自带的日志模块,我们可以选择log4js来完成日志记录的功能. 如果用过JAVA中log4j的同学,肯定对日志并不陌生,学习log4js会更得心应手的. 项目要用log4js记录日志,网上找的教程都是很久以前的,新版本log4js跟旧版本有一些不同,看文档结合旧版本配置了能用的log4js,记录一下,当前log4js版本2.3.12,采用按天分片的方式,同时输出到控制台和文件. log4js单独配置到一个文件,其他要使用的引用这个文件. log-

  • Crashlytics Android 异常报告统计管理(详解)

    简介 Crashlytic 成立于2011年,是专门为移动应用开者发提供的保存和分析应用崩溃信息的工具.Crashlytics的使用者包括:支付工具Paypal, 点评应用Yelp, 照片分享应用Path, 团购应用GroupOn等移动应用. 2013年1月,Crashlytics被Twitter收购,成为又一个成功的创业产品.被收购之后,由于没有了创业公司的不稳定因素,我们更有理由使用它来分析应用崩溃信息. 使用Crashlytics的好处有: 1.Crashlytics不会漏掉任何应用崩溃信

  • MySQL8.0 Undo Tablespace管理详解

    目录 1. UNDO 基础概念 2. UNDO 相关参数 2.1 参数含义 3. UNDO 表空间运维 3.1 查看UNDO的基本信息 3.2 添加/active/inactive/删除UNDO表空间 3.3 影响UNDO inactive(truncate)性能的因素 4. UNDO 的监控 4.1 UNDO的监控指标 4.2 UNDO的状态值 5. UNDO 大小对并发数的限制 5.1 UNDO 记录的类型及大小 5.2 UNDO各场景下支持的读写并发 5.2.1 场景1: 每个事务都执行一

  • SpringCloud微服务开发基于RocketMQ实现分布式事务管理详解

    目录 消息队列实现分布式事务原理 RocketMQ的事务消息 代码实现 基础配置 发送半消息 执行本地事务与回查 Account-Service消费消息 测试 小结 消息队列实现分布式事务原理 首先让我们来看一下基于消息队列实现分布式事务的原理方案. 柔性事务 发送消息的服务有个OUTBOX数据表,在进行INSERT.UPDATE.DELETE 业务操作时也会给OUTBOX数据表INSERT一条消息记录,这样可以保证原子性,因为这是基于本地的ACID事务. OUTBOX表充当临时消息队列,然后我

  • C++实现单例模式日志输出详解

    目录 一.单例模式简单介绍 1.1 基础介绍 1.2 单例模式使用场景 二.单例模式实现日志记录(Singleton Logger) 三.总结 一.单例模式简单介绍 1.1 基础介绍 单例模式只保证一个程序内只有一个实例存在,并提供全局访问点来访问该实例,其实就是单例模式的类对象只允许存在一个,它和多线程思想恰恰相反,为的是保证操作资源的安全.比如日志系统需要记载时间的,如果多线程会搞得很乱. 实现单例模式的关键是构造函数需要被设为私有,以防止外部代码创建多个实例.同时,需要提供一个静态方法来获

  • JVM内存管理之JAVA语言的内存管理详解

    引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓狂的内存溢出和泄露的问题. 可怕的事情还不只如此,有些使用其它语言开发的程序员,给JAVA程序员扣上了一个"不懂内存"的帽子,这着实有点让人难以接受.毕竟JAVA当中没有malloc和delete.没有析构函数.没有指针,刚开始接触JAVA的程序员们又怎么可能接触内存这一部分呢,更何况有不

  • django站点管理详解

    管理界面是基础设施中非常重要的一部分.这是以网页和有限的可信任管理者为基础的界面,它可以让你添加,编辑和删除网站内容.Django有自己的自动管理界面.这个特性是这样起作用的:它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作. Django的管理员模块是Django的标准库django.contrib的一部分.这个包还包括其它一些实用的模块: django.contrib.auth django.contrib.sessions django.contr

随机推荐