当前位置: 首页 > news >正文

日志相关的学习记录

Logger.error还不知道怎么传参打印?看完这个你就明白了-CSDN博客

日志使用的方式

  • 使用e.getMessage()、e .toString() 都不会打印堆栈信息,最好直接打印e。

  • 当使用两个参数error(String message, Throwable t),且第二个参数为Throwable(就是catch的的exception e)时,才会将完整的异常堆栈(就是显示哪一行出了问题,而不是只是输出报什么错)打印出来

  • 使用多个参数的error方法时,如果需要包含e参数,要把e参数放在末尾,才会完整的打印出错误堆栈信息。如:Logger.error("打印1{},打印2{},异常信息: ",123,“456”,e)。

以后写代码一定报错输出一定要先打印出日志的prefix,要不看日志都不知道是啥哪个报文出问题

java Logger.error打印错误异常的详细堆栈信息-CSDN博客

使用Logger.error(e)、Logger.error(e.getMessage())、Logger.error(“some msg” + e)、Logger.error(“some msg” + e.getMessage()) 都是调用的error(Object message),这个方法都会将入参当作Object输出,不会打印堆栈信息。
在使用Logger.error("first param ",e)时会调用error(String message, Throwable t),此方法会完整的打印出错误堆栈信息。

通常情况下,我们都是使用Logger所在的类的名称来作为Logger的名称

示例:

public class TestLogError {

public static final Logger log = LoggerFactory.getLogger(TestLogError.class);

public class test {

public class test { public static final Logger LOGGER = LogManager.getLogger(test.class);

两种使用的区别

maven项目构建以及原因:

使用maven的原因:因为使用maven,会使得项目管理比较容易。

团队中某一人新导入了一个jar包,如果没有maven,他则需要给团队中每个人拷贝一个jar包,并提示他们添加jar包到项目中,如果有maven,他则需要提示团队中的人更新一下pom.xml文件,maven则会帮你把相关jar包都完美地添加到项目中。

新建maven项目

通过idea建立maven项目_ideal只想创建一个有pom文件的maven项目-CSDN博客

普通项目变成maven项目:

1.暴力

普通java web项目转为maven项目_java项目改成maven项目-CSDN博客

2.推荐,引入maven后会生成一个pom.xml文件和对应的目录结构(但是需要自己新增配置文件)

3步将普通Java项目转成maven项目(IntelliJ IDEA)_怎樣將一個新建的普通java項目手動變成一個maven項目-CSDN博客

在IDEA中创建properties配置文件_idea创建properties配置文件-CSDN博客

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;/*** @author hw* @PROJECT_NAME:* @DESCRIPTION:*/
public class Test {public static final Logger LOGGER = org.apache.log4j.Logger.getLogger(Test.class);
//    在代码中显式指定 log4j 配置文件的路径:static {PropertyConfigurator.configure("src/main/resources/Test.properties");}public static void main(String[] args) {try{// 模拟空指针异常//Integer nullInt = Integer.valueOf(null);int[] array = {1,2,3,4,5};int outBoundInt = array[5];}catch (Exception e){// 直接打印,则只输出异常类型LOGGER.error(e);// 使用字符串拼接LOGGER.error("使用 + 号连接直接输出 e : " + e);LOGGER.error("使用 + 号连接直接输出 e.getMessage() : " + e.getMessage());LOGGER.error("使用 + 号连接直接输出 e.toString() : " + e.toString());// 使用逗号分隔,调用两个参数的error方法LOGGER.error("使用 , 号 使第二个参数作为Throwable : ", e);// 尝试使用分隔符,第二个参数为Throwable,会发现分隔符没有起作用,第二个参数的不同据,调用不同的重载方法LOGGER.error("第二个参数为Throwable,使用分隔符打印 {} : ", e);}}
}
注意:如果配置文件命名是log4j.properties就不需要指定路径了

如图:

输出到控制台:

pom文件:可以在先在代码里面import class时候再去点击代码里面的import 想学习,就会显示提示add depencies
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>groupId</groupId><artifactId>test</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>
<!--    确保项目构建时将 log4j.properties 文件包含在最终的 JAR 或 WAR 文件中。--><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include></includes></resource></resources></build></project>

配置文件:

# 设置根日志级别为 INFO
log4j.rootLogger=INFO, console
# 这一行设置了根日志记录器的日志级别为 INFO,并指定了一个名为 "console" 的 appender。这意味着只有 INFO 及以上级别的日志会被记录,并且这些日志会通过 "console" appender 输出。# 定义控制台日志记录器
log4j.appender.console=org.apache.log4j.ConsoleAppender
# 这一行定义了一个名为 "console" 的 appender,类型为 `org.apache.log4j.ConsoleAppender`。这个 appender 会将日志输出到控制台。# 设置控制台日志记录器的目标
log4j.appender.console.Target=System.out
# 这一行指定了 "console" appender 的目标为 `System.out`,即标准输出流,也就是控制台。# 设置日志布局
log4j.appender.console.layout=org.apache.log4j.PatternLayout
# 这一行设置了 "console" appender 的布局格式为 `org.apache.log4j.PatternLayout`,允许自定义日志的输出格式。# 设置日志格式
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# 这一行定义了日志的具体输出格式:
# - `%d{yyyy-MM-dd HH:mm:ss}`:日期和时间格式,例如 "2023-10-01 12:34:56"。
# - `%-5p`:日志级别,左对齐,宽度为 5 个字符,例如 "INFO "。
# - `%c{1}`:日志记录器的名称,只显示最后一级,例如 "Test"。
# - `%L`:日志记录的行号,例如 "123"。
# - `%m`:

一般都设置同时输出到控制台和文件:
# 设置根日志级别为 INFO,日志通过 console 和 file 两个 appender 输出
log4j.rootLogger=INFO,console,file# 定义控制台日志记录器
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n# 定义文件日志记录器
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=logs/app.log  # 输出到文件 logs/app.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

 Appenders 必须存在,否则根日志记录器就没有输出目标,日志消息就无法被处理。

没有app.log就会自动新建一个,这个文件是自定义的,如图

log4j.rootLogger=INFO,console,file2
log4j.appender.file2=org.apache.log4j.FileAppender
#默认输出到当前项目根目录下的 logs/app.log 文件中
log4j.appender.file2.File=logs/app.log  # 输出到文件 logs/app.log
log4j.appender.file2.layout=org.apache.log4j.PatternLayout
这几个属性是必备的,没有就没法输出

拓展:

为什么配置文件要放在 classpath 中?

  • 自动加载Log4j 会自动加载类路径中的配置文件,无需额外的配置或代码。只要配置文件位于类路径下,Log4j 会自动加载它。
  • 可移植性:当项目被打包成 JAR 或 WAR 文件时,配置文件依然会被包含在其中并可被读取。
  • 环境独立性:你可以根据不同的环境(如开发、测试、生产)提供不同的配置文件。通过不同的类路径配置文件,Log4j 可以在不同的环境中使用不同的日志策略。

拓展:
C:\path\to\libs\* 表示 C:\path\to\libs 目录下的所有 JAR 文件。这是 Java 类路径(Classpath)的一种常见表示方式,用于告诉 JVM 或编译器在指定目录下查找所有的 JAR 文件。
至于为什么不能是 WAR 文件:
文件格式不同:
JAR 文件:Java Archive 文件,用于打包 Java 类文件、资源文件等。JAR 文件可以被 JVM 直接加载和使用。
WAR 文件:Web Application Archive 文件,用于打包 Web 应用程序,包括 JSP、HTML、JavaScript、CSS 文件以及 JAR 文件等。WAR 文件通常部署在应用服务器(如 Tomcat、Jetty)上,而不是直接被 JVM 加载

public class Test {
    public static final Logger LOGGER = org.apache.log4j.Logger.getLogger(StringBufferExample.class);
修改一开始加载的文件,日志就会显示别的文件名

点击getlogger方法可以看到有很多重载方式;

相关文章:

日志相关的学习记录

Logger.error还不知道怎么传参打印&#xff1f;看完这个你就明白了-CSDN博客 日志使用的方式 使用e.getMessage()、e .toString() 都不会打印堆栈信息&#xff0c;最好直接打印e。 当使用两个参数error(String message, Throwable t)&#xff0c;且第二个参数为Throwable(就是…...

HTML和JavaScript实现商品购物系统

下面是一个更全面的商品购物系统示例&#xff0c;包含新增商品、商品的增加删除以及结算找零的功能。这个系统使用HTML和JavaScript实现。 1.功能说明&#xff1a; 这个应用程序使用纯HTML和JavaScript实现。 包含一个商品列表和一个购物车区域。商品列表中有几个示例商品&a…...

深度学习中的激活函数

激活函数(activation function)是应用于网络中各个神经元输出的简单变换&#xff0c;为其引入非线性属性&#xff0c;使网络能够对更复杂的数据进行建模&#xff0c;使其能够学习更复杂的模式。如果没有激活函数&#xff0c;神经元只会对输入进行枯燥的线性数学运算。这意味着&…...

编写php项目所需环境

需要编写php项目&#xff0c;需要看到编写的代码展现的效果&#xff0c;这里我选择用xampp来展现 准备工作&#xff1a; https://learncodingfast.com/how-to-install-xampp-and-brackets/#Installing_and_Running_XAMPP xampp下载地址&#xff1a;https://www.apachefriends.…...

华为机试HJ108 求最小公倍数

首先看一下题 描述 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值&#xff0c;设计一个算法&#xff0c;求输入A和B的最小公倍数。 数据范围&#xff1a; 1≤a,b≤100000 输入描述&#xff1a; 输入两个正整数A和B。 输出描述&#xff1a; 输出A和B的最小公…...

【Python技术】同花顺wencai涨停分析基础上增加连板分析

周末&#xff0c;有读者加我&#xff0c; 说 之前的涨停分析 是否可以增加连板分析。 这个可以加上。 先看效果 这里附上完整代码&#xff1a; import streamlit as st import pywencai import pandas as pd from datetime import datetime, timedelta import plotly.graph_o…...

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…...

【LeetCode】3356、零数组变换 II

【LeetCode】3356、零数组变换 II 文章目录 一、数据结构-差分-一维差分、二分1.1 数据结构-差分-一维差分、二分1.1.1 题意复述1.1.2 思路1.1.3 手写二分1.1.4 sort.Search() 二分1.1.5 sort.Find() 二分 二、多语言解法 一、数据结构-差分-一维差分、二分 1.1 数据结构-差分…...

Vue 子组件修改父组件传过来的值的三种方式

方式1&#xff1a;子组件发送emit&#xff0c;触发父组件修改 父组件 <template><div><son :count"count" updateCount"updateCount" /></div> </template><script> import son from "./son"; export def…...

4.Python 数字类型

Python 数字类型总结 文章目录 Python 数字类型总结1. 数字类型概述特点 2. 数字类型的创建与赋值3. 数字类型转换4. 数学运算与函数math 模块cmath 模块 5. 随机数生成6. 三角函数7. 数学常量 总结 Python 提供了多种数字类型来存储和操作数值数据。这些类型包括整数、浮点数、…...

MacOs 日常故障排除troubleshooting

1. 关闭开机自启动 app X macOs 15.1 System settings -> General -> Login Items & Extensions->Open at Login -> Select app X and click -...

(补)算法刷题Day19:BM55 没有重复项数字的全排列

题目链接 给出一组数字&#xff0c;返回该组数字的所有排列 例如&#xff1a; [1,2,3]的所有排列如下 [1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], [3,2,1]. &#xff08;以数字在数组中的位置靠前为优先级&#xff0c;按字典序排列输出。&#xff09; 思路&#xff1a; 使用回…...

golang中的值传递与引用传递,如何理解结构体的方法?

先从一个例子说起 type Counter struct {count int }func (c Counter) Inc() {c.count }func test1() {c : Counter{}do : func() {for i : 0; i < 10; i {c.count}fmt.Println("done")}go do()go do()time.Sleep(3 * time.Second)fmt.Println(c.count) }func te…...

linux部署ansible自动化运维

ansible自动化运维 1&#xff0c;编写ansible的仓库&#xff08;比赛已经安装&#xff0c;无需关注&#xff09; 1、虚拟机右击---设置---添加---CD/DVD驱动器---完成---确定 2、将ansible.iso的光盘连接上&#xff08;右下角呈绿色状态&#xff09; 3、查看光盘挂载信息 df -h…...

docker—私有仓库搭建

docker—私有仓库搭建 HTTP 部署 docker run -d \-p 5000:5000 \--restartalways \--name registry \-v /opt/data/registry:/var/lib/registry \registry:2使用官方的 registry​ 镜像来启动私有仓库。默认情况下&#xff0c;仓库会被创建在容器的 /var/lib/registry​ 目录…...

【SpringAOP】深入浅出SpringAOP从原理到源码

AOP对象是如何创建的 对于熟悉Spring IOC流程源码的同学来说&#xff0c;一定了解bean的整个生命周期&#xff0c;也就是从实例化、属性填充、初始化三个过程。那么对于Bean 工厂来说&#xff0c;是如何保证需要创建代理的对象创建代理的呢。 从图中可以看到&#xff0c;本质…...

Java 从查询超时到性能提升 (实战讲解)

目录 1. 问题所示2. 原理分析3. 解决方法3.1 代码优化3.2 索引优化3.3 删数据 1. 问题所示 查询返回速度慢&#xff0c;导致前端页面无数据显示 前端和后端均未报错&#xff0c;但后端未能在合理时间内返回结果到前端 后端没有报错日志 2. 原理分析 单独分析代码中的对算法…...

《C 语言携手 PaddlePaddle C++ API:开启深度学习开发新征程》

在深度学习领域&#xff0c;PaddlePaddle 作为一款强大的深度学习框架&#xff0c;为开发者提供了丰富的功能和高效的计算能力。而 C 语言&#xff0c;凭借其高效性和广泛的应用场景&#xff0c;与 PaddlePaddle 的 C API 相结合&#xff0c;能够为深度学习开发带来独特的优势。…...

Mysql之存储过程

MySQL 存储过程&#xff08;Stored Procedure&#xff09; 1. 概念 存储过程是一组预编译的 SQL 语句集合&#xff0c;可以通过调用名称来执行。存储过程可以接收参数&#xff0c;并支持复杂的业务逻辑&#xff08;如条件语句、循环、异常处理等&#xff09;。它们可以提高代…...

XV6 开发环境搭建

Step 1 搭建ubuntu 20.04 虚拟机 注意&#xff1a;一定要使用ubuntu 20.04&#xff0c;该版本可以直接通过deb安装gnu编译工具链。 安装完虚拟机后&#xff0c;换apt源。 ubuntu20.04镜像下载链接 设置root账户密码: sudo passwd root Step 2 下载解压qemu 5.1.0 wget ht…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...