当前位置: 首页 > 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…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...