日志-Log4J

2023-11-14

日志:

程序中的日志可以用来记录程序在运行的时候点点滴滴。并可以进行永久存储

日志和输出语句的区别:
输出语句 日志技术
取消日志 需要修改代码,灵活性比较差 不需要修改代码,灵活性比较好
输出位置 只能是控制台 可以将日志信息写入到文件或者数据库中
多线程 和业务代码处于一个线程中 多线程方式记录日志,不影响业务代码的性能

在这里插入图片描述

Log4J作用:
  1. 通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件等位置
  2. 可以控制每一条日志的输出格式
  3. 通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程
  4. 可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码
日志核心技术:

Loggers(记录器) 日志的级别

  • Loggers组件在此系统中常见的五个级别:DEBUG、INFO、WARN、ERROR 和 FATAL。
  • DEBUG:开发过程打印一些基本的信息
  • INFO:开发过程打印一些重要的信息
  • WARN:警告,可能会出现问题,给出一些提示
  • ERROR:发生错误,但是不影响程序继续运行
  • FATAL:严重的错误,程序会被停止
  • DEBUG < INFO < WARN < ERROR < FATAL。
  • Log4j有一个规则:只输出级别不低于设定级别的日志信息。对应上面的级别
  • 比如配置文件定义了一个INFO级别的,那么 DEBUG的就不会被输入,如果遇到输出不了的问题,可以看看是不是配置的级别太高了

配置文件:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.ca.ImmediateFlush=true
log4j.appender.ca.Target=System.er
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

测试类:

public class Demo05 {

    //使用log4j的api来获取日志的对象
    //弊端:如果以后我们更换日志的实现类,那么下面的代码就需要跟着改
    //不推荐使用
    // private static final Logger LOGGER = Logger.getLogger(Demo05.class);


    //使用slf4j里面的api来获取日志的对象
    //好处:如果以后我们更换日志的实现类,那么下面的代码不需要跟着修改
    //推荐使用
    private static final Logger LOGGER = LoggerFactory.getLogger(Demo05.class);
    
    public static void main(String[] args) {
        LOGGER.debug("debug级别的日志");
        LOGGER.info("info级别的日志");
        LOGGER.warn("warn级别的日志");
        LOGGER.error("error级别的日志");
    }
}

Appenders(输出源)

Appenders:日志要输出的地方

  • 把日志输出到不同的地方,如控制台(Console)、文件(Files)等。
  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)

Layouts(布局) 日志输出的格式

常用的布局管理器:

可以根据自己的喜好规定日志输出的格式

  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
配置文件:

格式:

  1. log4j.rootLogger=日志级别,appenderName1,appenderName2,…
  2. 日志级别:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。
    OFF:关闭所有日志
    ALL:展示所有日志
  3. appenderName1 就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。
    例如:log4j.rootLogger=INFO,ca,fa

ConsoleAppender(往控制台输出)常用的选项

  1. ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
  2. Target=System.err 默认值是System.out。
    System.err是错误输出流,打印的是红色的

FileAppender(往文件输出)常用的选项

  • ImmediateFlush=true:表示所有消息都会被立即输出。设为false则不输出,默认值是true
  • Append=false
    true表示将消息添加到指定文件中,原来的消息不覆盖。
    false则将消息覆盖指定的文件内容,默认值是true。
  • File=D:/logs/logging.log4j: 指定消息输出到logging.log4j文件中

PatternLayout常用的选项

  • log4j.PatternLayout:可以灵活的指定布局模式,最常使用
  • log4j.SimpleLayout:包含日志信息的级别和信息字符串
  • log4j.TTCCLayout:包含日志产生的时间、线程、类别等信息

ConversionPattern=%m%n设定以怎样的格式显示消息

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

日志-Log4J 的相关文章

  • 如何修改log4j JsonLayout字段名称

    我已经使用此配置文件配置了 log4j 2 来编写我的MapMessage控制台
  • 是否有与 TestNG 连接的 log4j 附加程序?

    我使用 log4j 并希望通常在我的日志记录工具中结束的日志消息出现在我的单元测试期间 TestNG 创建的测试报告中 我认为这意味着 log4jAppender输出到 TestNGListener以及我的 Maven 项目的 src te
  • -Dlog4j.formatMsgNoLookups=true 或 -Dlog4j2.formatMsgNoLookups=true - 哪个是正确的?

    哪一个是正确的 Dlog4j formatMsgNoLookups true Dlog4j2 formatMsgNoLookups true 或者两者都在工作 Ref log4j https dev to composite how to
  • 捕获 log4j 输出

    我们正在使用log4j2广泛地存在于我们的系统中 并对其进行配置log4j2 xml 现在我需要一个可以运行的新应用程序jobs 我想单独捕获时间 X 和 Y 之间产生的所有日志并将其放入数据库中 我们框架的正常日志记录应该照常发生 记录到
  • log4j 打印错误的字符

    有人报告我给他的使用 log4j 的程序无法正确打印字符 他告诉我 在文件中打印为 例如 Vid o 变成 Vid o 这可能是一些编码问题 但我喜欢重现问题以证明它已修复 我无法找到有关该主题的良好 且简短 文档 因此 是什么导致了这个问
  • 不同的应用程序写入相同的 log4j 日志文件

    我有 4 个 java Java EE 应用程序 其中两个是在 WebSphere 中运行的基于服务器的 j2ee 应用程序 另外两个是独立的 java 应用程序 我的日志框架是使用 log4j properties 的 log4j 问题
  • 如何将所有日志从hibernate和spring重定向到log4j2?

    我使用下一个技术堆栈构建我的 superWebApp persistence provider Hibernate 4 x webMvc and beans container Spring 4 x web containter Tomca
  • 将 logback.xml 转换为 log4j.properties

    如何将此 logback xml 转换为等效的 log4j properties
  • 多模块 Maven 项目中的 log4j

    如何在多模块 Maven 项目中实现 log4j 我是否将 log4j properties 文件添加到每个子模块的 src main resources 目录中 如果是这样 我是否必须为每个文件附加器指定不同的输出文件 或者有没有一种方法
  • 使用log4j2,如何记录键值对

    我需要创建带有键值对的日志 如下所示 PatternLayout 是否支持使用 log4j2 xml 对线程中的静态字段 如 log level class name event id 等 执行此操作 日志样本 2014 06 18 11
  • Log4J SocketAppender 吞下来自远程客户端的调试信息

    我已经配置了一个简单套接字服务器 http logging apache org log4j 1 2 apidocs org apache log4j net SimpleSocketServer html public class Sim
  • log4j 记录器消息不显示在 JBoss Web 应用程序上

    我使用 Jboss 6 和我的 static Logger logger Logger getLogger Foo class 什么也不显示 尝试将 log4 添加到我的项目中 将其删除 将 log4j 文件放在我的 main resour
  • Log4j:如何配置最简单的文件日志记录?

    我的故事 我想做一个像最简单的 log4j 记录器一样简单的东西 它将行记录到文件中 我找到了几个具有某些功能的示例 但不是一个真正有效的基本 通用的示例 也没有一个解释每一行如何工作的示例 问题 有人可以提供一份吗 先决条件 我已经知道该
  • 在jsp页面中使用log4j的正确方法是什么

    我的意思是 我希望记录器名称反映 source jsp 文件 无论它是否包含在另一个文件中或编译为类或其他文件 首先 导入所需的包 即 then the jsppagename jsp根据您使用的服务器 可能会发生变化 然后 在 jsp 内
  • Log4J 仅将一个类附加到附加程序

    我需要定期轮询正在运行的应用程序的 JVM 内存统计信息 我正在运行一个服务来执行此操作并将统计信息写入根记录器 我对根记录器的使用与否没有太多控制权 我想要做的是将这些日志消息路由到单个附加程序 该附加程序应该只处理来自该类的日志消息 而
  • 无法让 grizzly 日志记录工作,没有任何内容写入我的 log4j 日志文件

    我有一个简单的 Java Spring 程序 使用标准 log4j properties 文件来控制日志记录 工作正常 当我们通过以下方式添加 Grizzly 时 GrizzlyHttpServerFactory createHttpSer
  • 如何缓解 Apache Log4j 反序列化 RCE (CVE-2019-17571)

    我已将 log4j core 依赖项升级到 2 15 0 以防止任何潜在的 Log4Shell 攻击 话虽如此 我无法从 1 2 17 升级 slf4j log4j12 的间接 log4j 依赖项 因为 slf4j log4j12 的最新稳
  • log4j 中的异常深度

    我的 Myfaces 2 应用程序遇到实例化异常 但是通过 log4j 打印的异常会切断堆栈跟踪的其余部分 这是我所看到的 javax faces FacesException java lang InstantiationExceptio
  • SLF4J 日志记录到文件 vs. DB vs. Solr

    我需要一些关于 SLF4J 日志记录的建议 目前 我们正在为 Java Web 应用程序使用 SLF4J 日志记录 log4j 绑定 该应用程序使用简单的 ConsoleAppender 我们的下一步是研究可以保存日志的地方 我们的应用程序
  • Spark 执行器 STDOUT 到 Kubernetes STDOUT

    我在 Spark Worker 中运行的 Spark 应用程序将执行程序日志输出到特定文件路径 worker home directory app xxxxxxxx 0 stdout I used log4j properties将日志从

随机推荐

  • 【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)

    目录 一 前言 二 实验环境 三 NumPy 0 多维数组对象 ndarray 1 多维数组的属性 1 创建数组 2 数组操作 1 索引和切片 a 索引 b 切片 2 形状操作 a 获取数组形状 b 改变数组形状 c 展平数组 3 转置操作
  • 聚类算法(K-means & AGNES & DBSCAN)

    一 聚类算法基本概念 1 定义 聚类就是按照某个特定标准 如距离准则 把一个数据集分割成不同的类或簇 使得同一个簇内的数据对象的相似性尽可能大 即聚类后同一类的数据尽可能聚集到一起 不同数据尽量分离 简单来讲就是把相似的东西分到一起 2 无
  • 哈工大2021机器学习期末考试题

    一 说明参数正则化和参数后验之间的联系 并解释在机器学习模型参数估计中使用正则化的目的 二 给出条件熵的定义 举一个本课程中应用该方法的例子 说明使用条件熵的好处 给出你的直观解释 三 朴素贝叶斯的基本假设是什么 有什么好处 当假设满足时
  • webpack : 无法加载文件 C:\Users\12987\AppData\Roaming\npm\webpack.ps1,因为在此系统上禁止运行脚本。

    通过查询综合了意见给出以下解决办法 webpack src index js o build built js mode development出现的问题 解决 1 管理员身份cmd输入 set ExecutionPolicy Remote
  • ubuntu 18.04 安装 opencv-2.4.13.6

    ubuntu 18 04 安装 opencv 2 4 13 6 1 opencv 2 4 13 6下载 2 安装opencv 2 4 13 6 1 解压opencv 2 4 13 6 zip到根目录下 2 安装opencv 2 4 13 6
  • 几个友好Java代码习惯建议

    我工作多年 遇到过各种各样的同事 我见过各种代码 优秀的 垃圾的 没有吸引力的等等 所以这篇文章记录了一个优秀的Java开发应该具备哪些良好的开发习惯或最佳实践 1 封装方法参数 当你的方法参数过多时 建议封装一个对象 下面是反面教材 谁教
  • 理解傅里叶分析

    一 什么是频域 从我们出生 我们看到的世界都以时间贯穿 股票的走势 人的身高 汽车的轨迹都会随着时间发生改变 这种以时间作为参照来观察动态世界的方法我们称其为时域分析 而我们也想当然的认为 世间万物都在随着时间不停的改变 并且永远不会静止下
  • 【Mybatis】mybatis3入门

    mybatis简介 MyBatis 是一款优秀的持久层框架 它支持定制化 SQL 存储过程以及高级映射 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 MyBatis 可以使用简单的 XML 或注解来配置和映射
  • 【经验分享】- 这是一份来自 IT 男的电脑使用建议

    这是一份来自 IT 男的电脑使用建议 1 写在前面 2018 年高考结束我拿到了第一台笔记本电脑 此前对电脑接触地并不多 因此在这几年的电脑使用过程中积累了一些个人使用经验和使用技巧想要分享给可能还是电脑小白的你 个人一直以来用的还是 Wi
  • 自己动手定制Chromium系列之四:Chromium 58的一个编译配置

    aec untrusted delay for testing Current value from the default false From third party webrtc modules audio processing BU
  • (成功解决)Python连接clickhouse

    第一次尝试用Python连接clickhouse数据库 踩了不少坑 特此记录 帮助后人少犯错 运行环境 python 3 8 3 clickhouse driver 0 2 3 clickhouse sqlalchemy 0 2 0 sql
  • Linux-(C/C++)动态链接库生成以及使用(libxxx.so)

    linux静态库生成与使用 http www cnblogs com johnice archive 2013 01 17 2864319 html Linux中so文件为共享库 与windows下dll类似 不过实现要简单 so可以供多个
  • 小熊错误_小熊派4G开发板初体验

    开发板硬件资源介绍 前阵子小熊派发布了一款超高性价比的4G开发板 但是板子仅限量1000套 小熊派官方给我送了一块 我们一起来学习学习 板子做得小巧精致 控制核心用的是移远的EC100Y LTE Cat1无线通信模组 该模组可对所有用户开放
  • Python开发环境Wing IDE如何使用调试功能

    在使用Wing IDE开始调试的时候 需要设置断点的行 读取GetItemCount函数的返回 这可以通过单击行并选择Break工具栏条目 或通过单击行左边的黑色边缘 断点应该以实心红圈的形式出现 接下来使用绿色箭头图标开始调试或在Debu
  • 基于微信小程序的健身小助手小程序

    文末联系获取源码 开发语言 Java 框架 ssm JDK版本 JDK1 8 服务器 tomcat7 数据库 mysql 5 7 8 0 数据库工具 Navicat11 开发软件 eclipse myeclipse idea Maven包
  • Mysql中分组后取最新的一条数据

    在 SQL 中 你可以使用子查询和 ORDER BY 子句来实现按照特定字段进行分组 并获取每个分组中最新的一条记录 SELECT t1 FROM your table t1 INNER JOIN SELECT id MAX timesta
  • 云技术平台赋能媒体融合发展创新

    欢迎大家前往腾讯云技术社区 获取更多腾讯海量技术实践干货哦 作者 熊普江 媒体行业是传统而又新兴的行业 在数字化 信息化 移动化快速演进的今天 无论是用户 社会还是行业 政府都意识到 传统媒体与新兴媒体融合发展是必然之路 但媒体融合需要内容
  • 2021-07-14 React 代码规范整理

    文章目录 React 代码规范 1 基础规则 2 组件声明 1 组件名称和定义该组件的文件名称建议要保持一致 2 不要使用 displayName 属性来定义组件的名称 应该在 class 或者 function 关键字后面直接声明组件的名
  • 烟花代码

    div div
  • 日志-Log4J

    日志 程序中的日志可以用来记录程序在运行的时候点点滴滴 并可以进行永久存储 日志和输出语句的区别 输出语句 日志技术 取消日志 需要修改代码 灵活性比较差 不需要修改代码 灵活性比较好 输出位置 只能是控制台 可以将日志信息写入到文件或者数