【Java基础】Java日志—什么是日志级别?如何配置数据源到不同的位置?配置文件内容都是什么含义?

news2024/11/24 6:01:59

目录

一、log4j1详情:记录器和日志级别

二、 log4j1详情:输出源【输出到不同的位置】

1、ConsoleAppender【将日志输出到控制台】

2、FileAppender【将日志输出到文件】

3、DailyRollingFileAppender【每日输出到一个新文件】

4、JDBCAppender【输出到数据库】

💟 创作不易,不妨点赞💚评论❤️收藏💙一下


前言

log4j 包括三个主要部件:

  • 记录器 Loggers: 用于设置日志级别与输出源

  • 输出源 Appenders: 日志要输出的地方

  • 布局 Layouts: 日志输出格式


一、log4j1详情:记录器和日志级别

记录器:

#log4j.rootLogger=日志级别, 输出源1, 输出源2, ...
log4j.rootLogger=trace, stdout, file

日志级别:

  • 日志级别:用于控制程序日志输出内容,不同的级别对应不同的方法。

  • log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别)

级别 Level描述
ALL特殊级别:最低等级的,用于打开所有日志记录
TRACE指定细粒度比DEBUG更低的信息事件
DEBUG细粒度信息事件。显示应用程序==调试==相关。
INFO粗粒度级别,强调程序的运行情况。显示应用程序运行==信息==相关。
WARN具有潜在危害。显示应用程序==警告==相关。
ERROR错误事件可能仍然允许应用程序继续运行。显示应用程序==错误==相关。
FATAL指定非常严重的错误事件,这可能导致应用程序中止。显示应用程序==致命==相关。
OFF特殊级别:最高等级的,用于关闭所有日志记录
  • 优先级从低到高依次为:

ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

  • 如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。

  • 例如:如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出

  • 一般只使用4个级别,优先级从高到低为 ERROR > WARN > INFO > DEBUG

  • 6个日志级别,对应Java Logger类的6个方法

二、 log4j1详情:输出源【输出到不同的位置】

  • 输出源(Appender) 用来指定日志输出的位置

  • 基本语法:

    log4j.appender.名称=输出源实现类(固定值,由log4j提供)
    log4j.appender.名称.属性=属性值
    log4j.appender.名称.layout=布局实现类(固定值)
    log4j.appender.名称.layout.ConversionPattern=格式
  • 常见实现类有:

名称描述
AsyncAppender使用一个单独线程记录日志,实现异步处理日志事件。
ConsoleAppender将日志信息输出到控制台
DailyRollingFileAppender将日志输出到一个日志文件,并且每天输出到一个新的文件
FileAppender一个OutputStreamAppender,将日志输出到文件
JDBCAppender将日志通过JDBC输出到关系型数据库
JMS Appender将日志输出到JMS(Java Message Service)
RewriteAppender允许对日志信息进行加工
RollingFileAppender按log文件最大长度限度生成新文件
SMTPAppender将日志输出到邮件
SocketAppender将日志输出到一个Socket
SyslogAppender是一个SocketAppender,将日志输出到远程系统日志

1、ConsoleAppender【将日志输出到控制台】

# 2.1 将日志输出到控制台
# log4j.appender.数据名称.属性
# 第一行:一个类,设置别名stdout
# 第二行:调用别名stdout.属性 别名的set方式,设置他的输出方式,一个是out一个是err,输出方式的颜色不同
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n

常见属性:

Target:以什么方式输出到控制台。

  • 取值:System.out、System.err

  • 默认值:System.out


2、FileAppender【将日志输出到文件】

# 2.2 将日志输出到文件
# 设置一个别名,属性指定消息输出文件所在位置,设置是否将消息进行追加,false就是不追加将会覆盖消息
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:/file.log
log4j.appender.file.Append=false
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n

常见属性:

  • file:消息输出文件所在位置

  • Append:消息是否追加到指定的文件。

    • true:将消息追加到指定文件,默认值。

    • false:将消息覆盖指定的文件


3、DailyRollingFileAppender【每日输出到一个新文件】

# 2.3 每日输出到一个新文件
# DatePattern:配置回滚文件的后缀格式
# 回滚文件:每一天按照指定格式生成一个文件,如果存在就在改文件的基础上在生成一个文件;按照DatePattern设置的后缀格式生成.log结尾的文件
log4j.appender.daily=org.apache.log4j.DailyRollingFileAppender
log4j.appender.daily.File=d:/daily.log
log4j.appender.daily.Append=true
log4j.appender.daily.DatePattern='-'yyyy-MM-dd-HH-mm'.log'
log4j.appender.daily.layout=org.apache.log4j.PatternLayout
log4j.appender.daily.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n

常见属性:

DatePattern: 配置回滚文件的后缀格式

  • '.'yyyy-MM:对应monthly(每月)

  • '.'yyyy-ww:对应weekly(每周)

  • '.'yyyy-MM-dd:对应daily(每天)

  • '.'yyyy-MM-dd-a:对应half-daily(每半天)

  • '.'yyyy-MM-dd-HH:对应hourly(每小时)

  • '.'yyyy-MM-dd-HH-mm:对应minutely(每分钟)


4、JDBCAppender【输出到数据库】

准备工作:

创建表:

CREATE TABLE `log` (
    `log_id` INT(11) NOT NULL AUTO_INCREMENT,
    `project_name` VARCHAR(255) DEFAULT NULL COMMENT '目项名',
    `create_date` VARCHAR(255) DEFAULT NULL COMMENT '创建时间',
    `level` VARCHAR(255) DEFAULT NULL COMMENT '优先级',
    `category` VARCHAR(255) DEFAULT NULL COMMENT '所在类的全名',
    `file_name` VARCHAR(255) DEFAULT NULL COMMENT '输出日志消息产生时所在的文件名称 ',
    `thread_name` VARCHAR(255) DEFAULT NULL COMMENT '日志事件的线程名',
    `line` VARCHAR(255) DEFAULT NULL COMMENT '号行',
    `all_category` VARCHAR(255) DEFAULT NULL COMMENT '日志事件的发生位置',
    `message` VARCHAR(4000) DEFAULT NULL COMMENT '输出代码中指定的消息',
    PRIMARY KEY (`log_id`)
);

添加坐标

  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.32</version>
</dependency>

log4j 配置

# 2.4 输出到数据库
log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
log4j.appender.database.driver=com.mysql.jdbc.Driver
log4j.appender.database.user=root
log4j.appender.database.password=1234
log4j.appender.database.Sql=INSERT INTO log(project_name,create_date,level,category,file_name,thread_name,line,all_category,message) values('leon','%d{yyyy-MM-dd HH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')
log4j.appender.database.layout=org.apache.log4j.PatternLayout
常见属性
  • url:数据库连接

  • driver:数据库驱动

  • user:数据库账号

  • password:数据库密码

  • sql:添加日志时执行的插入语句。与值为PatternLayout提供


写到最后

四季轮换,已经数不清凋零了多少, 愿我们往后能向心而行,一路招摇胜!

🐋 你的支持认可是我创作的动力

💟 创作不易,不妨点赞💚评论❤️收藏💙一下

😘 感谢大佬们的支持,欢迎各位前来不吝赐教

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

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

相关文章

FineReport开源报表系统-JS实现切换Tab块时进行数据联动

1. 概述 1.1 预期效果 在决策报表中&#xff0c;希望 Tab 块轮播切换时&#xff0c;可实现与报表块的数据联动。如下图所示&#xff1a; 1.2 实现思路 通过 JS 获取每个 Tab 块的轮播标题&#xff0c;转换为参数值&#xff0c;再通过控件进行界面传参&#xff0c;实现联动效果…

程序员工作五年后一般会怎样?

最近看到一些吐血言论“一个程序员工作5年后还没成为大牛&#xff0c;是不是该考虑别的路子了&#xff1f;”还有“程序员入行五年&#xff0c;有可能攒够80吗&#xff1f;”不是&#xff0c;程序员工作五年&#xff0c;是戳中了谁的痛点吗&#xff1f;&#xff1f;大家对五年经…

128页4万字某智慧能源集团数字化管理平台项目建议书

【版权声明】本资料来源网络&#xff0c;仅用于行业知识分享&#xff0c;供个人学习参考&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间进行删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 方案设计 在当…

公司新来的软件测试工程师接私活被抓了,难怪他天天加班到凌晨

昨天和我一起进公司的测试部门同事上班接私活被老板抓了&#xff0c;这人才来不到两个月&#xff0c;每天加班到凌晨。刚开始还以为他是个卷王&#xff0c;没想到此人上班时间接单&#xff0c;用加班时间来完成公司需求&#xff0c;造成努力的假象。被老板在办公室骂了俩小时&a…

v$asm_disk中free_mb低于300m导致加盘报ora-15041

背景&#xff1a; 某项目扩容加盘到磁盘组中报磁盘组空间耗尽的错误&#xff0c;如下 明明是加盘&#xff0c;却报空间不足的错误&#xff0c;令人费解 报错的磁盘组为normal冗余&#xff0c;且Usable_file_MB为负&#xff0c;且Free_MB剩余很少或为0 问题排查&#xff1a; …

MS 训练笔记【2】:nnFormer

文章目录前言1. 安装2. 训练与测试2.1. 数据处理2.1.1. 整理数据路径2.1.2. 设置 nnFormer 读取文件的路径2.1.3. 数据集预处理2.2. 训练2.2.1. 训练代码2.2.2. 可能出现的问题及解决办法2.3. 预测总结前言 本文主要记载 nnFormer 从安装到训练再到推理的过程。nnFormer 的环境…

invokeBeanFactoryPostProcessors的理解

invokeBeanFactoryPostProcessors的理解 Spring中有两个非常重要的扩展点&#xff1a; BeanFactoryPostProcessorBeanPostProcessor 其中第一个是可以对BeanDefinition注册时进行扩展&#xff0c;而第二个是对spring中IOC容器中的对象进行实例化的时候进行扩展。 今天主要谈一…

【安全漏洞】水平权限漏洞和垂直权限漏洞

前言 权限校验非常重要。如果不对水平、垂直权限做校验&#xff0c;就会发生泄漏用户数据的事故&#xff0c;造成P0故障。 一、水平权限漏洞 1、水平权限漏洞基本概念 什么是水平权限漏洞呢&#xff1f; 简单来说&#xff0c;水平权限漏洞是用户CURD了本不属于他的资源。以上图…

复活天若OCR的谷歌翻译接口

文章目录1. 资源2. 效果3. 前言4. 网络相关4.1. 网络判断4.2. 网络设置5. 修改5.1. 代码修改原理5.2. 代码修改1. 资源 这里直接放出来我已经修改编译好的天若OCR&#xff0c;开箱即用&#xff1a;https://www.lanzoui.com/ifT8t0jfv1gd 访问码&#xff1a;24647 不过需要说明…

性能优化系列之如何为不同格式的图片选择合适的应用场景?

文章の目录一、JPEG&#xff08;Joint Photographic Experts Group&#xff09;1、介绍2、不适合情形3、非常适合的情形二、PNG&#xff08;Portable Network Graphics&#xff09;1、介绍2、不适合的情形3、非常适合的情形三、GIF&#xff08;Graphics Interchange Format&…

【nowcoder】笔试强训Day9

目录 一、选择题 二、编程题 2.1另类加法 2.2走方格的方案数 一、选择题 1.下面程序的输出是:() String x"fmn"; x.toUpperCase(); String yx.replace(f,F); yy"wxy"; System.out.println(y); A FmNwxy B fmnwxy C wxyfmn D Fmnwxy String x “…

决胜「年货时代」:一场关于零食的品质突围

“都说冰糖葫芦儿酸&#xff0c;酸里面它裹着甜&#xff1b;都说冰糖葫芦儿甜&#xff0c;可甜里面它透着那酸。” 1995年春节&#xff0c;伴随着《冰糖葫芦》唱响大街小巷&#xff0c;小贩骑着自行车&#xff0c;后车座的草靶子上插满冰糖葫芦&#xff0c;或摆在集市上&#…

大数据系列——什么是hive?hive用来干什么的?hive常见问题是啥?

目录 一、什么是hive 二、为什么要使用Hive 三、Hive与Hadoop的关系 四、Hive与HDFS的关系 五、Hive与传统数据库区别 六、Hive中的数据存储是怎样的 七、对hive进行增删改查 八、排序逻辑 九、hive不支持update数据的解决方案 十、Hive中支持的分区类型有两种 十…

Linux部署前端Vue项目

Linux部署前端Vue项目 1 部署到tomcat上 1.1 部署Vue项目 打包项目 在命令行终端&#xff0c;输入命令&#xff0c;打包项目&#xff1a; npm run build将生成的dist文件夹下的所有内容复制到tomcat的webapps下 "推荐":在webapps下新建一个文件夹&#xff0c;例…

【互信息驱动:可逆神经网络】

Mutual Information-driven Pan-sharpening &#xff08;互信息驱动的全色锐化&#xff09; 全色锐化的目的是综合纹理丰富的全色图像和多光谱图像的互补信息&#xff0c;生成纹理丰富的多光谱图像。尽管已有的全色锐化方法取得了显著的进步&#xff0c;但它们并没有明确地加…

动态圣诞树-HTML

<!DOCTYPE HTML PUBLIC> <html> <head> <title>圣诞树</title> <meta charset"utf-8" > <style> html, body { width: 100%; height: 100%; margin: 0; padding: 0; border: 0; } div { margin: 0; padding: 0; border: 0…

docker高级篇:实战-自己开发的微服务怎么在docker上面运行?

通过前面的一系列学习,我们已经知道怎么制作dockerfile了。那么,本篇文章,咱们就把自己写的spring boot的demo项目,部署在docker上面。 案例目标: 我们自己开发的微服务怎么在docker上面运行呢? 1:通过IDEA新建一个普通的微服务模块 2:通过dockerfile发布微服务部署…

通过 api 和 keycloak 理解OIDC认证

参考资料 通过Keycloak API理解OAuth2与OpenID Connect 什么是keycloak如何在nodejs中使用它 如何通过 OIDC 协议实现单点登录&#xff1f; https://jwt.io/#encoded-jwt OIDC认证的简单demo 单点登录&#xff08;Single Sign On&#xff09;是目前比较流行的企业业务整合…

cut与分层抽样(Stratified Sampling)

个人觉得&#xff0c; 把分层抽样称为“分类采样”会更贴切一些。通常最基本的采样手段是&#xff1a;随机抽样&#xff0c;但是在很多场景下&#xff0c;随机抽样是有问题的&#xff0c;举一个简单的例子&#xff1a;如果现在要发起一个啤酒品牌知名度的调查问卷&#xff0c;我…

二、let进阶、const、全部变量与顶层对象

二、let进阶、const、全部变量与顶层对象 一、let进阶 let创建了块级作用域&#xff0c;每次循环时内部的块级作用域都会去访问外层块级作用域中的变量i&#xff0c;而外层块级作用域中的变量i都不同&#xff0c;所以打印0-9&#xff1b;类似于闭包&#xff1a;内部函数返回到…