日志技术简介

java日志体系

  1. 日志的主流体系
    日志技术简介
  2. 日志的用途
  3. 软件开发中,我们经常需要去调试程序,做一些信息,状态的输出便于我们查询程序的运行状况。为了让我们能够更加灵活和方便的控制这些调试的信息,所以我们需要专业的日志技术。java 中寻找bug 会需要重现。调试也就是debug 可以在程序运行中暂停程序运行,可以查看程序在运行中的情况。日志主要是为了更加方便的去重现问题。
  4. 类似于我们sout到控制台在没有日志框架之前确实是这么做的 (加上IO技术永久保存)
  5. 日志的配置
  6. 目前使用的是logback(猜想log4j log4j12也可以用 出自同一个人)
  7. 工作环境是:关闭springboot默认的日志配置 只向控制台输出debug和info级别的日志

            %d{HH:mm:ss} %green([%-5level]) %logger{10}.%method %msg%n
            ${file.charset}

            debug
            ACCEPT
            DENY

            %d{HH:mm:ss} %green([%-5level]) %logger{10}.%M - %msg%n
            ${file.charset}

            info
            ACCEPT
            DENY

  • 标签的含义和用途(请具备xml基础的知识)
  • root: 根目录
    • 功能:本身也是一个logger顶级包的上级
    • 有level属性 指定要记录的日志级别 >=INFO 级别的被记录(级别不区分大小写)
    • 根标签有且仅有一个
    • 在没有logger的情况下 所有包/类的日志级别 都继承自根标签
  • logger
    • 功能:对特定包或类设置要被记录的日志
    • name :具体包或类
    • level:日志级别(>=debug)的生效
    • additivity:是否向上级传递 (如果要记录的包中有日志要被记录,且additivity的值为true(默认值),在有logger的情况下日志将会被记录两次)
    • appender-ref:具体由那种appender来记录
    • 子标签
    • encoder:要被记录的日志的格式进行设置
      • pattern:遵循java.text.Format接口规范
      • charset:字符编码
    • filter:对日志进筛选
      • class:具体执行的类 要配套使用
      • LevelFilter 需要指定 level级别和onMatch(>=level)策略 onMismatch(
      • onMatch策略和onMismatch策略 ACCEPT:接受并处理 DENY:拒绝并抛弃 NEUTRAL:不处理传递给下一个filter
      • ThresholdFilter:对>=level的筛选 只需要指定 level级别 更加细致的控制请看这篇博客: logback logback.xml常用配置详解(一) and – AUB – ITeye博客 记录到file中请看 参考博文
  • appender

    • 功能:日志记录被什么样的类执行
    • class:
    • ConsoleAppender 效果:输出到控制台
    • FileAppender 效果:输出文件
    • name:指定该appender叫什么 被logger/root的appender-ref:引用

    • 日志使用的思考
    • 不同的框架使用的日志技术可能不一样,对框架的日志技术的实现统一使用一种日志技术
    • 独立使用日志的配置文件 设定出适合自己的日志记录
    • 最佳实践
    • 总是使用 Log Facade,而不是具体的 Log Implementation
    • 只添加一个 Log Implementation 依赖
    • 具体的日志依赖应该设置为 optional,并使用 runtime scope
      设为optional,依赖不会传递,这样如果你是个lib项目,然后别的项目使用了你这个lib,不会被引入不想要的Log Implementation 依赖;
      Scope设置为runtime,是为了防止开发人员在项目中直接使用Log Implementation中的类,而不使用Log Facade中的类。
    • 如果有必要, 排除依赖的第三方库中的Log Impementation依赖
      这是很常见的一个问题,第三方库的开发者未必会把具体的日志实现或者桥接器的依赖设置为optional,然后你的项目继承了这些依赖——具体的日志实现未必是你想使用的,比如他依赖了Log4j,你想使用Logback,这时就很尴尬。另外,如果不同的第三方依赖使用了不同的桥接器和Log实现,也极容易形成环。
      这种情况下,推荐的处理方法,是使用exclude来排除所有的这些Log实现和桥接器的依赖,只保留第三方库里面对Log Facade的依赖。 最佳实践的配置

    org.slf4j
    slf4j-api
    ${version}

    ch.qos.logback
    logback-core
    ${version}

    ch.qos.logback
    logback-classic
    ${version}

    org.slf4j
    slf4j-log4j12
    99.0-does-not-exist

    org.slf4j
    log4j-over-slf4j
    ${version}

    org.slf4j
    jcl-over-slf4j
    ${version}

    log4j
    log4j
    99.0-does-not-exist

    apache-log4j
    log4j
    999-not-exist

  1. Java日志体系详解_Jeremy_Lee123的博客-CSDN博客_java 日志体系
  2. 多种java 日志框架【超详细图文】_不埋雷的探长的博客-CSDN博客_java主流日志框架
  3. logback 的使用和 logback.xml 详解 + 多模块项目示例_肖朋伟的博客-CSDN博客
  4. Logback日志使用_半桶水的码农的博客-CSDN博客_logback日志使用
  5. logback logback.xml常用配置详解(一) and – AUB – ITeye博客

2020-7-27

自定义配置遇到的问题:

  1. <root level="off"></root>这样关闭会导致 别人的代码中(框架)的日志消息全部不显示

个人理解的一个误区: 日志像异常一样 在我的包中发生的层层上抛 我的配置可以管理到 &#xD7;

框架中的日志输出根据实现的不同,可以通过日志技术写入控制台,也可以通过标准输出到控制台

2.根据1来推出

  • 1.框架中的日志是都丢给了root 以下是证明

日志技术简介

日志技术简介

结论是:我们不能更加具体的控制框架 什么包输入什么包不输出日志

猜想:1.在root 关闭的基础上 可以通过全局异常捕获(aop)来 抓异常自己输出到控制台(这个网上有类似解决方案)

​ 2.学习代理技术 来解决

  • 2.日志实现可以不通过log.info()…的方式输出到控制台

日志技术简介

日志技术简介

结论:日志写入控制台的方式表面上看 可以有两种 调用log.info()…和 System.out(err)

猜想:写入控制台的本质都是 调用了System.out/err()

​ logback.xml的配置中 <target>System.out</target>

​ application.yml的配置中使用 org.apache.ibatis.logging.stdout.StdOutImpl这中日志实现时

​ 无论root 是否关闭,其都会在控制台输出! logback.xml的配置是对log.info()…这些方式的管理

Original: https://www.cnblogs.com/acman-mr-lee/p/16506495.html
Author: ACMAN-Mr.Lee
Title: 日志技术简介

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586511/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 高效能研发体系构建概论【原创】

    背景 技术管理者(技术总监/经理/CTO)都会面临公司战略执行,公司业绩的压力,以及业务对技术团队支撑能力的期望和诉求。如何打造一支快速响应,高效能,能打硬仗的技术团队?是技术管理…

    Java 2023年6月8日
    069
  • Redis学习笔记之安装

    Redis学习笔记之安装 一、Windown 下安装 2. 解压: 3. 加入环境变量(就不需要到解压目录运行命令) //redis-server.exe运行程序 //redis….

    Java 2023年6月5日
    065
  • java 缩略图

    http://chenhua-1984.iteye.com/blog/1870812 Original: https://www.cnblogs.com/jenson138/p/4…

    Java 2023年5月29日
    086
  • 分布式锁的实现方案

    什么是分布式锁 当多个进程在同一个系统中,用分布式锁控制多个进程对资源的访问 分布式锁应用场景 传统的单体应用单机部署情况下,可以使用java并发处理相关的API进行互斥控制。 分…

    Java 2023年6月13日
    068
  • Java连载156-IO总结(三)

    一、管道流 &#xA0;&#xA0;<span class="hljs-keyword">final</span>&am…

    Java 2023年6月13日
    082
  • JavaWeb入门

    1.Web概念概述 JavaWeb:使用Java语言开发基于互联网的项目 1.1 软件架构 C/S:Client/Server 客户端、服务器端 在用户本地有一个客户端程序,在远程…

    Java 2023年6月6日
    078
  • 剑指面向对象

    一、面向过程和面向对象 1.1、面向过程 1.2、面向对象 二、变量 2.1、变量的分类 2.2、变量的初始值 2.3、变量的作用域 2.4、变量的生命周期 三、类 3.1、类的定…

    Java 2023年6月7日
    070
  • CodeSmith Template Model Output

    背景:上学那会儿就接触CodeSmith,是一款非常优秀的代码自动生成工具。以前写过好些基本模版,可惜早不知道扔到哪儿去了,如今只能重新开始,把它捡回来,加油。 效果:将数据库 D…

    Java 2023年6月9日
    061
  • c# 反射专题—————— 介绍一下是什么是反射[ 一]

    前言 为什么有反射这个系列,这个系列后,asp net 将会进入深入篇,如果没有这个反射系列,那么asp net的源码,看了可能会觉得头晕,里面的依赖注入包括框架源码是大量的反射。…

    Java 2023年5月30日
    073
  • python模块–collections

    python的内建模块collections有几个关键的数据结构,平常在使用的时候,开发者可以直接调用,不需要自己重复制造轮子,这样可以提高开发效率。 1. deque 双端队列 …

    Java 2023年6月14日
    074
  • javaGUI中下拉列表联动问题

    首先 : 具体解释下 标题 下拉列表联动 就是将两个或两个以上的下拉列表连接(称作连接,后面就明白什么意思了) 简单的 例如 当我们点击别的省或市时 简而言之 就是实现下拉列表的联…

    Java 2023年6月5日
    089
  • 自定义spring boot starter 初尝试

    从几篇博客中了解了如何自定义starter,大概分为以下几个步骤: 1 引入相关依赖; 2 生成属性配置类; 3 生成核心服务类; 4 生成自动化配置类; 5 注册配置/META-…

    Java 2023年6月13日
    061
  • 引入Elasticsearch7.x版本后,原本好好的服务无法启动了

    问题背景 项目上使用的springboot版本是 2.1.1.RELEASE,现在因为要接入elasticsearch7.x版本,参考官方文档要求,需要将springboot版本升…

    Java 2023年6月6日
    090
  • Spring boot 2.0 之优雅停机

    spring boot 框架在生产环境使用的有一段时间了,它”约定大于配置”的特性,体现了优雅流畅的开发过程,它的部署启动方式( java -jar xxx…

    Java 2023年5月30日
    067
  • Java之POI导出Excel(二):多个sheet

    相信在大部分的web项目中都会有导出导入Excel的需求,之前我也写过一篇导出单个sheet工作表的文章,没看过的小伙伴可以去看哈,链接也给大家放出来了: 导出单个sheet 但是…

    Java 2023年6月15日
    093
  • 类加载(四):spring-boot-loader 模块

    spring-boot jar包结构 2、 正常情况下,java -jar的类加载器是AppClassLoader 但是spring 使用自定义的URLClassLoader加载我…

    Java 2023年5月30日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球