(企业 / 公司项目)Java如何打印漂亮的日志?

启动类

首先在idea创建一个项目这里就不演示了,直接看demo

 找到项目的启动类,首先把启动类日志打印基本信息,这样就不用找来找去找不到地址以及端口

主要作用就是启动一个Spring Boot应用程序,并获取程序的运行环境。首先创建一个SpringApplication对象,并传入应用程序的主类MemberApplication.class。接着通过调用run()方法启动应用程序,并获取应用程序的运行环境对象Environment。然后使用LOG.info()方法输出一段启动成功的日志信息。最后使用LOG.info()方法再输出一段访问地址的日志信息,其中通过调用environment.getProperty("server.port")方法获取当前应用程序的端口号,并将其作为占位符填入日志信息中。 记住仔细看导入的包

package com.javawa.train.member.config;import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.Environment;@SpringBootApplication
@ComponentScan("com.javawa")
@MapperScan("com.javawa.train.member.mapper")
public class  MemberApplication {// 定义日志变量private static  final Logger LOG  = LoggerFactory.getLogger(MemberApplication.class);public static void main(String[] args) {SpringApplication app = new SpringApplication(MemberApplication.class);Environment environment = app.run(args).getEnvironment();LOG.info("启动成功!!!");// 前面为 地址{}  参数为占位符LOG.info("访问地址:\thttp:/127.0.0.1:{}",environment.getProperty("server.port"));}
}

 接口日志以及各种日志

有两个版本 有些是logback.xml 有些是logback-spring.xml

xml配置如下:

 <!-- 修改一下路径-->
    <property name="PATH" value="./log/member"></property> 这里是你可以多个模块的话就可以把/member换成你自己的模块名字,配置以后就会生成日志到你项目路径中自动创建一个log包里面就是你的日志

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 修改一下路径-->
<!--    定义一个名为"PATH"的属性,其值为"./log/member",这个路径用于指定日志文件输出的目录。--><property name="PATH" value="./log/member"></property>
<!--定义一个名为"STDOUT"的appender,其类为"ch.qos.logback.core.ConsoleAppender",用于将日志输出到控制台。--><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><!-- 定义日志输出的格式,包括时间、日志级别、日志器名称、行号、线程名、日志ID和日志信息。其中,%d{mm:ss.SSS}表示时间格式为"mm:ss.SSS",%highlight表示高亮日志级别,%blue表示高亮日志器名称,%green表示高亮日志ID。--><!-- <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %blue(%-50logger{50}:%-4line) %thread %msg%n</Pattern>--><Pattern>%d{mm:ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %thread %green(%-16X{LOG_ID}) %msg%n</Pattern></encoder></appender><!--   错误日志 -->
<!--    定义一个名为"TRACE_FILE"的appender,其类为"ch.qos.logback.core.rolling.RollingFileAppender",用于将日志输出到文件。--><appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${PATH}/trace.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</FileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><layout>
<!--            定义日志输出的格式,包括时间、日志级别、日志器名称、行号、线程名、日志ID和日志信息。其中,%d{mm:ss.SSS}表示时间格式为"mm:ss.SSS",%highlight表示高亮日志级别,%blue表示高亮日志器名称,%green表示高亮日志ID。--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %thread %green(%-16X{LOG_ID}) %msg%n</pattern></layout></appender><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${PATH}/error.log</file>
<!--        定义滚动策略,用于定期创建新的日志文件。--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--       定义日志文件名格式,包括日期和编号。其中,%d{yyyy-MM-dd}表示日期格式为"yyyy-MM-dd",%i表示编号,从0开始递增。--><FileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><layout><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %thread %green(%-16X{LOG_ID}) %msg%n</pattern></layout>
<!--        :定义日志过滤器,只允许日志级别为"ERROR"的日志通过。--><filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--            设置日志过滤器的日志级别为"ERROR"。--><level>ERROR</level>
<!--            设置日志过滤器匹配时执行的操作,这里是接受日志。--><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><root level="ERROR"><appender-ref ref="ERROR_FILE" /></root><root level="TRACE"><appender-ref ref="TRACE_FILE" /></root><root level="INFO"><appender-ref ref="STDOUT" /></root>
</configuration>

以上是一个logback配置文件,用于配置日志的输出格式、文件名、大小、级别等信息。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaSE学习-4-类和对象

1. 面向对象的初步认知 1.1 什么是面向对象 面向对象编程&#xff08;OOP&#xff09;是一种程序设计范式&#xff0c;它将程序中的数据和操作数据的方法封装到对象中。在面向对象的世界里&#xff0c;一切都被视为对象&#xff0c;这些对象可以拥有数据&#xff08;成员变量&…

专家表示提高学生阅读素养离不开家校协同

12月初&#xff0c;《北京市中小学生阅读能力分级标准指南&#xff08;试行&#xff09;》&#xff08;以下简称《标准指南》&#xff09;正式发布。据悉&#xff0c;《标准指南》由北京教育科学研究院研制&#xff0c;旨在进一步明确各学年段学生阅读素养发展目标&#xff0c;…

5. 赋值操作符

5. 赋值操作符 并不是程序清单12.3的所有问题都可以归咎于默认的复制构造函数,还需要看一看默认的赋值操作符。 ANSI C 允许结构赋值,而C允许类对象赋值,这是通过自动为类重载赋值操作符实现的。这种操作符 的原型如下: Class name & Class_name :: operator (const Class_…

大数据机器学习:从理论到实战,探索学习率的调整策略

大数据机器学习&#xff1a;从理论到实战&#xff0c;探索学习率的调整策略 全文目录 大数据机器学习&#xff1a;从理论到实战&#xff0c;探索学习率的调整策略一、引言二、学习率基础定义与解释学习率与梯度下降学习率对模型性能的影响 三、学习率调整策略常量学习率时间衰减…

《PySpark大数据分析实战》-16.云服务模式Databricks介绍运行案例

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

【大数据面试】Flink面试题附答案

目录 ✅Flink介绍、特点、应用场景 ✅Flink与Spark Streaming的区别 ✅Flink有哪些部署模式 ✅Flink架构 ✅怎么设置并行度&#xff1f; ✅什么是算子链&#xff1f; ✅什么是任务槽&#xff08;Task Slots&#xff09;&#xff1f; ✅任务槽和并行度的关系 ✅Flink作…

TOPCON拓普康SR-3AR亮度计

特征 &#xffed; 分光测光方式下的高速度、高精度值测定。 &#xffed; 无需使用辅助镜&#xff0c;也能实现细微面、低亮度领域的高精度测定。 &#xffed; 电动切换测定角(2/1/0.2/0.1)。 &#xffed; 高精度测定频闪光源&#xff08;搭载同步测定功能、积分时间延期…

uint29传输格式

前言 不知道谁想出来的。 反正我是想不到。 我看网上也没人讲这个。 写篇博客帮一下素未谋面的网友。 uint29 本质上是网络传输的时候&#xff0c;借用至多4字节Bytes&#xff0c;表达29位的无符号整数。 读8位数字&#xff0c;判断小于128? 是的话&#xff0c;返回末7位…

[原创][R语言]股票分析实战[3]:周级别涨幅趋势的相关性

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

App(Android)ICP备案号查询——————高仿微信

&#x1f604; 个人主页&#xff1a;✨拉莫帅-CSDN博客✨&#x1f914; 博文&#xff1a;132篇&#x1f525; 原创&#xff1a;130篇&#xff0c;转载&#xff1a;2篇&#x1f525; 总阅读量&#xff1a;388923❤️ 粉丝量&#xff1a;112&#x1f341; 感谢点赞和关注 &#x…

大数据时代,如何基于机密虚拟化技术构建数据安全的“基石”

云布道师 2023 年 10 月 31 日-11 月 2 日&#xff0c;2023 云栖大会在中国杭州云栖小镇举行&#xff0c;阿里云弹性计算产品专家唐湘华、阿里云高级安全专家刘煜堃、蚂蚁集团高级技术专家肖俊贤三位嘉宾在【云服务器 & 计算服务】专场中共同带来题为《大数据时代&#xf…

SpringBoot和JDK版本兼容性

SpringBoot和JDK版本兼容问题&#xff0c;就是SpringBoot的每个版本支持哪些JDK版本。 在spring官网、spring-boot项目的github地址都没有找到一个统一的总结&#xff0c;类似表格这样&#xff0c;所以到spring-boot的各个版本的文档中找出来。如果有官方的总结我没找到的&…

uni-app只执行一次事件

在 <script setup> 中&#xff0c;你可以使用 onMounted 钩子函数来实现只执行一次的事件。onMounted 钩子函数会在组件挂载后立即执行&#xff0c;并且仅执行一次&#xff0c;因此适合用于只执行一次的事件处理。 以下是一个示例&#xff0c;演示了如何在 <script s…

Java 多线程之 ThreadLocal 的使用

文章目录 一、概述二、使用方法三、测试示例四、应用示例五、在 Spring 源码中应用 一、概述 ThreadLocal 用于在多线程环境中维护线程封闭&#xff08;thread-local&#xff09;的变量。线程封闭是一种确保变量在多线程环境中的线程安全性的机制&#xff0c;每个线程都有自己独…

3-高可用-隔离术

隔离是指将系统或资源分割开&#xff0c;系统隔离是为了在系统发生故障时&#xff0c;能限定传播范围和影响范围&#xff0c;即发生故障后不会出现滚雪球效应&#xff0c;从而保证只有出问题的服务不可用&#xff0c;其他服务还是可用的。 比较多的隔离手段有线程隔离、进程隔…

Java--包,访问修饰符,多态数组,==和equals,hashcode,toString

包 同一个包里面不能有重复的类&#xff0c;不同的包可以有相同的类&#xff0c;包和包之间互不干涉。一个包下面有很多的类。 包的命名规则&#xff1a; 只能包含数字&#xff0c;字母&#xff0c;下划线&#xff0c;小圆点&#xff0c;但不能用数字开头&#xff0c;不能是关…

2_js运算符与流程控制语句

1. 运算符的应用 1.1 算数运算符 浮点数的精度问题 浮点数值的最高精度是17位小数&#xff0c;不要直接判断两个浮点数是否相等。 var result 0.1 0.2; // 结果不是 0.3&#xff0c;而是&#xff1a;0.30000000000000004 console.log(0.07 * 100); // 结果不是 7&#…

C++学习笔记(十五)

继承 继承是面向对象三大特性之一 有些类与类之间存在特殊的关系&#xff0c;例如下图中&#xff1a; 我们发现&#xff0c;定义这些类时&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性。 这个时候我们就可以考虑利用继承的技术&#xff0c;减少重…

3 - Electron app BrowserWindow对象-关于窗口

优雅的打开应用~ 当加载缓慢&#xff0c;打开应用的一瞬间会出现白屏&#xff0c;以下方法可以解决 const mainWindow new BrowserWindow({ show: false }) mainWindow.once(ready-to-show, () > {mainWindow.show() }) 设置背景颜色 const win new BrowserWindow({ b…

对数器的作用(找bug)

冒泡排序 package class02;public class Code_Comp_BubbleSort {public static void bubbleSort(int[] arr) { // 冒泡排序错误写法if (arr.length < 2) {return;}for (int i 0; i < arr.length; i) {for (int j 0; j < arr.length - 1; j) {if (arr[j] < arr[j…