记录日志_JDIT的博客-程序员宅基地

技术标签: JAVA基础  

这个是程序员的核心工作,程序不是开发出来的是debug出来的,生产不是搭建出来的,是通过日志追踪来的。
日志是一个系统的核心,sout自己看看还可以,真实项目尽量忘记这个内置API,否则代码扫描就是给自己挖坑。

日志很重要,正式发布的应用日志一般都要有几个要求:

  • 可定向输出,可能是catlina.out,也可能是ln 后的某个磁盘文件,也许在nas盘,也许被agent抓取到云日志平台。
  • 有日志级别,日志分级很重要。
  • 日志可以格式化,可读性永远是程序员必须遵守的规则。
  • 可配置可控制,这个更是日志的核心,本地开发,甚至在测试VM上调试,都可以开启debug模式,但是到生产环境可能是海量的日志,运行稳定我们一般都只到info级别。这个需要动态配置控制,因为那天生产临时出问题,我们还有临时修改为debug,找到问题然后再改为info。如果用sout肯定完蛋。

基本日志

  public static void main(String[] args) {
    
    Logger.getGlobal().setLevel(Level.ALL);
    Logger.getGlobal().info("123");
  }

最简单的demo,使用JDK自带的Logger类,可以通过在main方法设置,控制日志输出级别。

高级日志

通常日志有以下7个级别:

  • SERVERE
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

修改日志管理配置

jre/lib/logging.properties
要替代原始配置文件:
java -Djava.util.logging.config.file=configFile MainClass
JDK日志配置文件会在VM启动过程中初始化,所有不能main方法中进行设置,没有意义。
当然这个目前也没有意义,我们做javaweb开发,都会使用第三方日志。
常用的就是log4j工具,和对应的配置文件。

本地化

也就是格式化问题,只是为了可读性。

处理器

在默认情况下,日志及其将记录发送到ConsoleHandler中,并由它输入到System.err流中。
我们可以了解文件处理器配置参数和自定义处理器,这个也是第三方日志的核心。

我们可以通过扩展Handler 类或StreamHandler类自定义处理器。
有空了再补充吧。
可以参考
通过这些基础,只是想说明一件事,JVM是核心,JDK提供了N多本地方法和可继承类,很多三方工具都是通过JDK API扩展来的,只我们一直在玩业务,对于N多API我们闻所未闻,更是没有深入了解过。

过滤器

在默认情况下,过滤器根据日志记录的级别进行过滤。
过滤器有一个熟悉的名称,当初加班两天一夜做安全加固,其核心工作离不开过滤器。
中美贸易战,入侵害人不浅。

每个日志记录器和处理器都可以有一个可选的过滤器来完成附加的过滤。

另外,可以通过实现Filter接口并定义下列方法来自定义过滤器。

bolean isLoggabble(LogRecord record)

格式化器

ConsoleHandler类和FileHandler类可以生成文本和XML格式的日志记录。
但是,也可以自定义格式。
这需要扩展Formatter类并覆盖下面这个方法:
String format(LogRecord record);

日志记录说明

  • 为一个简单的应用程序,选择一个日志记录器,并且按照类命名。
  • 最好在应用程序中安装一个更加适宜的默认配置。
  • 合理利用日志级别。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38280568/article/details/102907618

智能推荐

Mac OS mysql 启动命令_小贞贞的博客-程序员宅基地

在Mac OS X启动和停止MySQL服务的命令 启动MySQL服务 sudo /usr/local/mysql/support-files/mysql.server start 停止MySQL服务 sudo /usr/local/mysql/support-files/mysql.server stop 重启MySQL服务 sudo...

面向对象编程的三大特性及其含义_面向对象的编程方式最主要的三大特征?其分别对应的意思和意义是什么?_最菜小魏的博客-程序员宅基地

面向对象编程的四大特性及其含义Java/C++是每个人接触面向对象这个词汇的开始,但是很多人在学习了很长一段时间可能都不知道到底面向对象是什么意思,没能真正理解其中的含义。笔者就是这种人,实在是感到不好意思。首先来说说面向对象的含义。OOP(object oriented programming),面向对象的编程。学习面向对象之前还必须普及一个概念,就是面向过程,一般的学院派毕业的程序员,接..._面向对象的编程方式最主要的三大特征?其分别对应的意思和意义是什么?

MySQL的索引结构为什么使用B+树,而不是其他树形结构?_mysql的索引要使用b+树而不是其他树形结构?比如b树_【高级技工】的博客-程序员宅基地

目录1. 二叉查找树(BST):不平衡2. 平衡二叉树(AVL):旋转耗时3. 红黑树:树太高4. B树:为磁盘而生5. B+树6. 感受B+树的威力7. 总结出处: bilibili在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B+树作为索引结构。1. 二叉查找树(BST):不平衡二叉查找._mysql的索引要使用b+树而不是其他树形结构?比如b树

TX-LCN(分布式事务框架)_幽默涵养miss u的博客-程序员宅基地

TM服务器IP修改, TC访问TM时,使用的IP地址。默认127.0.0.1。代表TC和TM必须在同一个主机中。# 配置TM服务器地址。ip和端口查看TM WEB控制台中的IP和端口。# 修改TM服务器的WEB控制台登录密码, 默认登录密码是 codingapi。# TM事务管理端口。# TM服务器日志系统配置,默认关闭日志系统。在界面中输入登录密码:bjsxt(默认密码是codingapi)。# 自动创建表格的配置项。-- tc依赖要求,必须连接数据库。# 配置TM服务器日志系统数据库连接。_tx-lcn

centos7.6 下安装docker,docker compose_一人创客的博客-程序员宅基地

theme: channing-cyan一、安装docker```1、升级所有包(这步版本够用不要随便进行,会更新系统内核,可能导致开不了机)yum update  //升级所有包,同时升级软件和系统内核(#yum upgrade //升级所有包,不升级软件和系统内核)2、安装依赖包yum install -y yum-utils device-mapper-pe...

分享一个标星42.4k 的商城管理后台项目模板_祈澈菇凉的博客-程序员宅基地

mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展..._http://www.macrozheng.com/admin/#/login 密码

随便推点

Python 工业应用开发:Code Soft 软件的2次开发(1)_codesoft 二次开发_shu-learning的博客-程序员宅基地

简介:之前用Python做简易版MES系统的全栈开发的时候,有涉及到对Code Soft工业打印软件的调用功能。当时研究可行性的时候发现网上只有Java版本和C#版本的Demo样例,没找到Python的相关的示例。于是就自己解析了一下其ActiveX组件,并参照C#等示例中的用法构建了如下的python样例,供大家参考。Mini示例""" CodeSoft软件调用的最简Demoby mark 2020"""import win32com.client as winc # 主要_codesoft 二次开发

dreamweaver随记-----锚点连接_dw锚点链接代码_bzuld的博客-程序员宅基地

锚点连接指的就是想“只想网页内部的某个部分”假设想在“这是标题二”出加个锚点:这是标题二;假设想让超链接“指向标题二”指向该锚点:指向标题二假设锚点不在本网页,而是在另一个网页:指向标题二_dw锚点链接代码

6 个技巧,提升 C++11 的 vector 性能_c++11 vector_imJaron的博客-程序员宅基地

性能测试的搭建和方法:所有测试都在我的 Surface Book 中运行,这台笔记本拥有主频 2.6Ghz 的酷睿 i7 处理器,8 GB 内存,安装了 Windows 10 操作系统并使用 VS2015 C++ 编译器编译运行。我们会使用 Stopwatch。这个工具由 Kjell 创建,在 https://github.com/KjellKod/St_c++11 vector

SpringBoot2.X在Docker中的部署(一)——Docker入门_Aaron潇的博客-程序员宅基地

SpringBoot2.X在Docker中的部署(一)——Docker入门1.前言2.开发环境3.Docker基本概念4.Docker和VM的区别5.Docker安装6.Docker基本命令7.Docker镜像源设置1.前言  最近出于学习需求,需要搭建集群环境,然后使用Nginx作为反向代理服务器实现负载均衡。由于时间紧,VM安装调试非常麻烦,再加之mac笔记本跑VM内存不是很够,故而萌生了...

JDK 1.7 之后switch case 支持String,但Intellij IDEA编译失败(已解决)_即将奔跑的蜗牛的博客-程序员宅基地

1. 今天想测试一下switch case 使用String 参数的情况,遇到下列错误:后来设置了默认编译器版本为1.8也都还是有错误,想想就应该是还没有设置默认 之前建立的projects应该用的默认的1.6,经过查看,发现misc.xml中的JDK是1.6,代码如下: JDK_1_6" assert-keyword="true" jdk-15="true

推荐文章

热门文章

相关标签