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

Java用log4j写日志

日志可以方便追踪和调试问题,以前用log4net写日志,换Java了改用log4j写日志,用法和log4net差不多。

到apache包下载下载log4j的包,解压后把下图两个jar包引入工程
在这里插入图片描述

先到网站根下加一个log4j2.xml的配置文件来配置日志的格式和参数
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR"><!--Configuration 配置项status:log4j本身的日志级别, “trace”, “debug”, “info”, “warn”, “error” and “fatal”monitorInterval:每隔多少秒从新读取配置文件,可以在不重启的情况下修改配置--><Appenders><!--Appenders定义日志输出,有Console、File、RollingRandomAccessFile、MongoDB、Flume 等有Console:输出源到控制台File:将日志输出到文件,通过fileName指定存储到的文件(目录不存在会自动创建)RollingRandomAccessFile:也是写入文件,但可以定义规则按照文件大小或时间等重新创建一个新的日志文件存储;如果是按时间分割需要配合filePattern使用--><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %F %logger{36} - %msg%n"/><!--PatternLayout指定输出日志的格式 --></Console><File name="ExceptionRollingLogFileAppender" fileName="./Logs/异常日志.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><File name="DebugRollingLogFileAppender" fileName="./Logs/调试日志.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><File name="OperationRollingLogFileAppender" fileName="./Logs/方法日志.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><File name="SqlRollingLogFileAppender" fileName="./Logs/Sql语句日志.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><File name="CapabilityRollingLogFileAppender" fileName="./Logs/性能.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><File name="SecurityRollingLogFileAppender" fileName="./Logs/安全.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><RollingFile name="customscript" fileName="${LOG_HOME}${FILE_NAME}" filePattern="${LOG_HOME}${FILE_NAME}.%d{yyyy-MM-dd}.log"><PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %M %L - %msg%xEx%n"/><Policies><TimeBasedTriggeringPolicy /></Policies></RollingFile></Appenders><Loggers><!--日志器,通过LogManager.getLogger(日志器name)的日志器名字决定使用具体哪个日志器分为根Root日志器和自定义日志器--><Root level="ERROR"><!--当根据名字找不到对应的日志器时,使用Root的日志器leve:日志输出等级(默认ERROR);TRACE > DEBUG > INFO > WARN > ERROR, ALL or OFF--><AppenderRef ref="Console"/><!--AppenderRef:关联Appenders中定义的输出规则,可以有多个,日志可以同时输出到多个地方--><AppenderRef ref="debuglog"/></Root><Logger name="Exception" level="ALL" additivity="false"><!--Logger自定义日志器:name为日志器的名字,通过LogManager.getLogger(日志器name)获得该日志器连接additivity:相加性。默认为true,若为true会将当前日志内容也打印到它上面的日志器内,这里上面日志器是Root--><AppenderRef ref="ExceptionRollingLogFileAppender"/></Logger><Logger name="Operation" level="ALL" additivity="false"><!--Logger自定义日志器:name为日志器的名字,通过LogManager.getLogger(日志器name)获得该日志器连接additivity:相加性。默认为true,若为true会将当前日志内容也打印到它上面的日志器内,这里上面日志器是Root--><AppenderRef ref="OperationRollingLogFileAppender"/></Logger><Logger name="Debug" level="ALL" additivity="false"><!--Logger自定义日志器:name为日志器的名字,通过LogManager.getLogger(日志器name)获得该日志器连接additivity:相加性。默认为true,若为true会将当前日志内容也打印到它上面的日志器内,这里上面日志器是Root--><AppenderRef ref="DebugRollingLogFileAppender"/></Logger><Logger name="SqlLog" level="ALL" additivity="false"><!--Logger自定义日志器:name为日志器的名字,通过LogManager.getLogger(日志器name)获得该日志器连接additivity:相加性。默认为true,若为true会将当前日志内容也打印到它上面的日志器内,这里上面日志器是Root--><AppenderRef ref="SqlRollingLogFileAppender"/></Logger><Logger name="Capability" level="ALL" additivity="false"><!--Logger自定义日志器:name为日志器的名字,通过LogManager.getLogger(日志器name)获得该日志器连接additivity:相加性。默认为true,若为true会将当前日志内容也打印到它上面的日志器内,这里上面日志器是Root--><AppenderRef ref="CapabilityRollingLogFileAppender"/></Logger><Logger name="Security" level="ALL" additivity="false"><!--Logger自定义日志器:name为日志器的名字,通过LogManager.getLogger(日志器name)获得该日志器连接additivity:相加性。默认为true,若为true会将当前日志内容也打印到它上面的日志器内,这里上面日志器是Root--><AppenderRef ref="SecurityRollingLogFileAppender"/></Logger></Loggers>
</Configuration>

然后实现日志工具类

package LIS.Core.Util;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class LogUtils {//得到日志操作,默认写在Tomcat的Bin下//异常日志static final Logger loggerException = LogManager.getLogger("Exception");//操作日志static final Logger loggerOperation = LogManager.getLogger("Operation");//调试日志static final Logger loggerDebug = LogManager.getLogger("Debug");//sql日志static final Logger loggerSqlLog = LogManager.getLogger("SqlLog");//性能日志static final Logger loggerCapability = LogManager.getLogger("Capability");//安全日志static final Logger loggerSecurity = LogManager.getLogger("Security");/// <summary>/// 书写调试日志/// </summary>/// <param name="message">日志内容</param>public static void WriteDebugLog(String message){loggerDebug.debug(message);}/// <summary>/// 书写异常日志/// </summary>/// /// <param name="message">日志内容</param>/// <param name="exception">异常对象</param>public static void WriteExceptionLog(String message, Exception exception){loggerException.error(message, exception);}/// <summary>/// 书写性能日志/// </summary>/// <param name="message">日志内容</param>public static void WriteCapabilityLog(String message){loggerCapability.info(message);}/// <summary>/// 书写安全日志/// </summary>/// <param name="message">日志内容</param>public static void WriteSecurityLog(String message){loggerSecurity.info(message);}/// <summary>/// 书写操作日志/// </summary>/// <param name="message">日志内容</param>public static void WriteOperationLog(String message){loggerOperation.info(message);}/// <summary>/// 书写调试日志/// </summary>/// <param name="message">日志内容</param>public static void WriteSqlLog(String message){loggerSqlLog.debug(message);}
}

调用写日志测试
在这里插入图片描述

在这里插入图片描述

在Tomcat的Bin下的Logs生成日志
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

后面就把System.out.println的打印日志换为LIS.Core.Util.LogUtils写日志了

相关文章:

Java用log4j写日志

日志可以方便追踪和调试问题&#xff0c;以前用log4net写日志&#xff0c;换Java了改用log4j写日志&#xff0c;用法和log4net差不多。 到apache包下载下载log4j的包&#xff0c;解压后把下图两个jar包引入工程 先到网站根下加一个log4j2.xml的配置文件来配置日志的格式和参…...

PCTA认证考试-01_TiDB数据库架构概述

TiDB 数据库架构概述 一、学习目标 理解 TiDB 数据库整体结构。了解 TiDB Server&#xff0c;TiKV&#xff0c;TiFlash 和 PD 的主要功能。 二、TiDB 体系架构 1. TiDB Server 2. TiKV OLTP 3. Placement Driver 4. TiFlash OLAP OLTPOLAPHTAP...

路由过滤路由引入

目录 一、实验拓扑 二、实验需求 三、实验步骤 1、配置IP地址 2、配置RIP和OSPF 3、配置路由引入 4、使用路由过滤&#xff0c;使 R4 无法学到 R1 的业务网段路由&#xff0c;要求使用 prefix-list 进行匹配 5、OSPF 区域中不能出现 RIP 协议报文 一、实验拓扑 二、实…...

视频剪辑技巧:批量合并视频,高效省时,添加背景音乐提升品质

随着社交媒体的兴起&#xff0c;视频制作越来越受到人们的关注。掌握一些视频剪辑技巧&#xff0c;可以让我们轻松地制作出令人惊艳的视频。本文将介绍一种高效、省时的视频剪辑技巧&#xff0c;帮助您批量合并视频、添加背景音乐&#xff0c;并提升视频品质。现在一起来看看云…...

数据可视化篇——pyecharts模块

在之前的文章中我们已经介绍过爬虫采集到的数据用途之一就是用作可视化报表&#xff0c;而pyecharts作为Python中可视化工具的一大神器必然就受到广大程序员的喜爱。 一、什么是Echarts&#xff1f; ECharts 官方网站 : https://echarts.apache.org/zh/index.html ECharts 是…...

Python--快速入门二

Python--快速入门二 1.Python数据类型 1.可以通过索引获取字符串中特定位置的字符&#xff1a; a "Hello" print(a[3]) 2.len函数获取字符串的长度&#xff1a; a "Hello" print(a) print(len(a)) 3.空值类型表示完全没有值&#xff1a; 若不确定当…...

【ArcGIS Pro二次开发】(74):Python、C#实现Excel截图导出图片

以村庄规划制图为例&#xff0c;通过对现状和规划用地的统计&#xff0c;生成Excel格式的【空间功能结构调整表】后&#xff0c;需要进一步将表格导出成图片&#xff0c;并嵌入到图集中&#xff0c;这样可以实现全流程不用手动参与&#xff0c;让制图的流程完全自动化。 关于E…...

74HC138逻辑芯片

文章目录 74系列逻辑芯片——74HC138基础信息描述特征应用范围 功能信息封装引脚基本电路 扩展性能分析 74系列逻辑芯片——74HC138 基础信息 描述 74HC138器件设计用于需要极短传播延迟时间的高性能存储器解码或数据路由应用&#xff1b;在高性能存储系统中&#xff0c;可使用…...

【架构图解】API架构图解:如何以图表形式展现复杂系统

文章目录 前言序列图组件图数据流程图结论 前言 架构图是链接到 API 的不同组件/服务如何相互交互的直观表示。 当需要理解 API 的架构并将其传达给不同的利益相关者&#xff08;包括其他开发人员、项目经理和客户&#xff09;时&#xff0c;这些图表非常有用。 图表/视觉效…...

D-link未授权访问以及远程代码执行

随便输入一个错误密码&#xff0c;会跳转到页面&#xff1a; /page/login/login.html?errorfail继续访问有效页面漏洞url&#xff1a; /Admin.shtml然后访问管理页面去更改管理密码 直接构造payload访问漏洞url&#xff1a; /cgi-bin/execute_cmd.cgi?cmdid执行命令&#…...

flask踩坑集锦

很久之前用过flask&#xff0c;那时候是跟着教程&#xff0c;教程怎么做我就怎么做&#xff0c;没有仔细考虑过。 现在是全靠文档和搜索一步一步搭建&#xff0c;忘了很多东西&#xff0c;就碰了很多壁&#xff0c;浅浅记录一下子。 1.Jinja2的模板继承&#xff0c;是指抽出每…...

VulnHub jarbas

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…...

基因预测软件prodigal的使用

Prodigal是一款常用的基因预测软件&#xff0c;可以用于预测原核生物基因组中的开放阅读框&#xff08;ORF&#xff09;&#xff0c;并根据不同的编码调用方式&#xff08;如起始密码子和终止密码子&#xff09;对其进行注释。 以下是使用Prodigal进行基因预测的步骤&#xff…...

银行存取款系统

题目 ​ 一个简单的存取款系统,用户可以选择存钱、取钱、转账、修改密码和退出系统等业务。程序使用了菜单界面来展示业务选项,并根据用户的选择调用相应的函数进行处理。具体功能如下: 登录:实现登录功能,需要输入正确密码才能进入菜单系统。 菜单:显示菜单界面,列出其…...

ConnectionError: HTTPSConnectionPool

ConnectionError: HTTPSConnectionPool(host‘zbbfxstatic.figtingdream.com’, port443): Max retries exceeded with url: /api/cache (Caused by NewConnectionError(‘<urllib3.connection.HTTPSConnection object at 0x00000249795AD9A0>: Failed to establish a ne…...

YOLO系列环境配置及训练

目录 前言 一、下载所需 1、Anaconda安装 2、NVIDIA 驱动程序安装 3、CUDA安装 4、CUDNN下载及配置 二、环境配置 1、虚拟环境创建 2、Pytorch安装 3、pycharm环境切换及剩余库的安装 4、YOLO代码的测试及训练配置步骤 &#xff08;1&#xff09;测试 &#xff08…...

推荐PHP付费进群源码

PHP付费进群源码带自动定位基于ThinkPHP框架开发的&#xff0c;可以快速搭建知识付费粉丝进群。 更新&#xff1a; 1.首页付款轮播 2.城市定位功能 3.更新及优化域名库及支付设置 4.新增一张图模板设置模式&#xff0c;简化后台模板设置 5.前后台其他优化 演示地址&#xff1a…...

Maven修改仓库和镜像地址

目录 1、修改仓库地址2、修改镜像地址 1、修改仓库地址 使用IDEA时,如果不指定自己下载的Maven,idea会默认使用自带的Maven 3&#xff08;bundle)。maven 3默认的仓库路径一般是在c盘的用户文件夹中的.m2目录下&#xff1a; 当maven下的pom文件中的依赖逐渐增加时,maven仓库下…...

【m98】接收udp包到变为CopyOnWriteBuffer的rtp包及call模块传递的过程

RtpTransport::OnReadPacket ice和Dtls 传输的创建及1个简单的SFU转发实例 实例生动的再现了这一过程: 【webrtc】接收/发送的rtp包、编解码的VCM包、CopyOnWriteBuffer 对于m98的代码,进行走读,大体了解到类似的过程: \src\pc\rtp_transport.cc 收到的data指针和长度len 直…...

synchronized 到底锁的是谁?

synchronized 到底锁的是谁&#xff1f; 修饰方法&#xff1a; 1、静态方法 2、非静态方法&#xff0c;锁住的是方法的调用者 修饰代码块 1、synchronized修饰非静态方法 锁住的是方法的调用者 锁住实例 流程&#xff1a; 1、线程A先拿到synModel对象然后给这个 synModel对象…...

VirtualBox与enspPro模拟器的高效部署指南

1. 为什么选择VirtualBox运行enspPro模拟器 如果你正在学习网络技术或者准备华为认证考试&#xff0c;enspPro模拟器绝对是个好帮手。但很多人在第一步安装部署就卡住了&#xff0c;最常见的问题就是虚拟机环境配置不当导致模拟器无法正常运行。经过多次实践验证&#xff0c;Vi…...

淘宝 API 技术架构与实战指南:从实时数据流到 AIGC 融合的电商开发新范式

在数字经济加速渗透的今天&#xff0c;淘宝开放平台 API 已从简单的数据交互工具进化为支撑电商创新的核心基础设施。2025 年&#xff0c;淘宝 API 体系迎来重大技术跃迁&#xff0c;实时数据流、GraphQL 接口与隐私合规构成新的技术三角&#xff0c;推动电商开发进入 "毫…...

别再删容器重装了!Docker运行n8n工作流的正确姿势:从环境变量到数据持久化

Docker部署n8n工作流&#xff1a;从环境变量配置到持久化存储的完整实践指南 遇到n8n的Secure Cookie警告就删容器重装&#xff1f;这种简单粗暴的操作不仅低效&#xff0c;还可能丢失关键数据。本文将带你深入理解Docker部署n8n的正确方法论&#xff0c;从环境变量配置到数据…...

WPF调试神器:如何在GUI应用中优雅地输出Console日志(附完整代码)

WPF调试神器&#xff1a;如何在GUI应用中优雅地输出Console日志&#xff08;附完整代码&#xff09; 在WPF开发过程中&#xff0c;调试信息的实时输出是排查问题的关键环节。传统弹窗或文件日志方式要么打断用户体验&#xff0c;要么缺乏即时性。本文将介绍一种兼顾优雅与高效的…...

SAP权限对象深度解析:如何用SU21自定义企业级数据权限控制?

SAP权限对象深度解析&#xff1a;如何用SU21自定义企业级数据权限控制&#xff1f; 在SAP系统中&#xff0c;权限管理是保障企业数据安全的核心机制。对于中大型企业而言&#xff0c;标准权限配置往往难以满足复杂的业务需求&#xff0c;这就需要我们深入理解SAP权限对象的底层…...

MarkDown语法学习总结

MarkDown语法学习 一级标题&#xff1a;#空格标题名 二级标题 二级标题&#xff1a;##空格标题名 几级标题就写几个# 字体 粗体&#xff1a;** 文本 ** 你好 斜体&#xff1a;* 文本 * 你好 斜体加粗&#xff1a;* * * 文本 * * * 你好 删除线&#xff1a;~~ 文本~…...

如何用Sunshine打造个人专属的游戏云服务:从零开始搭建高性能串流服务器

如何用Sunshine打造个人专属的游戏云服务&#xff1a;从零开始搭建高性能串流服务器 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 厌倦了被高性能游戏主机束缚在固定位置&#x…...

保健及护理用家具市场:548.6亿元规模下的多维洞察

据恒州诚思调研统计&#xff0c;2025年全球保健及护理用家具收入规模约达466.7亿元&#xff0c;预计到2032年&#xff0c;这一数字将接近548.6亿元&#xff0c;2026 - 2032年的复合年增长率&#xff08;CAGR&#xff09;为2.5%。在医疗行业不断发展、人口结构持续变化的背景下&…...

【初学者说—C语言】

大家好&#xff01;我是一名计算机网络技术专业的学生&#xff0c;刚刚开始接触C语言&#xff0c;感到无比有趣。当然我并非是一时兴起来学C语言的&#xff0c;我学习C语言是为了跟好拿到offer, 为自己在这AI迭代更新迅速的时代谋求生路。学习代码是一个长久的过程&#xff0c;…...

Java 21虚拟线程实战:从基础创建到高并发场景调优

1. Java 21虚拟线程入门&#xff1a;从零开始掌握轻量级并发 第一次听说Java 21的虚拟线程时&#xff0c;我正被一个高并发服务的性能问题折磨得焦头烂额。当时我们的支付网关在促销期间每秒要处理上万笔交易&#xff0c;传统的线程池模型让服务器资源捉襟见肘。直到尝试了虚拟…...