Logback简介与配置详解

在开发和维护Spring Boot应用程序时,一个强大而灵活的日志框架是至关重要的。Spring Boot默认集成了Logback,一个高性能的Java日志框架。本文将介绍如何配置Logback以满足你的日志记录需求。

logback.jpg

Logback简介

官方网址:https://logback.qos.ch/

Logback是一款为Java应用程序设计的日志框架,旨在提供高性能、灵活性和可扩展性。它是log4j项目的继任者,并被广泛用于Java应用程序的日志记录。

Logback分为三个主要的模块:logback-core、logback-classic、和logback-access。

  • logback-core提供了基本的日志功能。

  • logback-classic建立在logback-core之上,兼容SLF4J和log4j API,提供了一套强大的日志框架。

  • logback-access允许通过servlet容器的访问日志功能来记录HTTP请求。()

Spring Boot默认集成了Logback,并用INFO级别输出到控制台。 由于Spring Boot通常使用嵌入式Servlet容器,并且这些容器已经具备了记录访问日志的功能,因此在默认情况下不需要引入logback-access。

Logback 具有许多优点,其中一些包括:

  • 性能高效

Logback被设计为高性能的日志框架,具有较低的运行时开销。

异步日志记录和可配置的缓冲机制有助于提高性能。

  • 灵活的配置

Logback的配置文件采用XML格式(通常命名为logback.xml),允许用户以声明式的方式配置日志输出。

支持通过Groovy脚本进行配置,提供更灵活的选项。

  • 丰富的Appender

提供多种Appender用于将日志输出到不同的目的地,如控制台、文件、数据库等。

支持异步Appender以提高性能。

  • 简单而强大的 API

Logback 的 API 设计简单易用,同时具备强大的功能。它继承了 Log4j 的 API,但在设计上进行了改进和优化,使得开发者可以更容易地集成和使用。

  • 广泛的社区支持

作为一个成熟而受欢迎的日志框架,Logback 拥有广泛的社区支持和活跃的开发者社群。这意味着开发者可以在社区中获取丰富的资源、文档和支持。

springboot配置logback

在src/main/resources目录下创建名为logback-spring.xml或者logback.xml的Logback配置文件。Spring Boot默认会加载类路径下的logback-spring.xml文件。如果该文件不存在,则会尝试加载logback.xml。如果我们使用的是别的配置名称,则需要在springboot 的application.yml配置文件中经行配置:

# 日志配置
logging:
  config: classpath:mylogback.xml

logback.xml的配置完整示例

  • 同步配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 日志存放路径 -->
	<property name="log.path" value="/data/xjdoc/logs" />
    <!-- 日志输出格式 -->
	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

	<!-- 控制台输出 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>
	
	<!-- 系统日志输出 -->
	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/sys-info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
	</appender>
	
	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/sys-error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
			<!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
			<!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

	<!-- 系统模块日志级别控制  -->
	<logger name="cn.xj" level="info" />
	<!-- Spring日志级别控制  -->
	<logger name="org.springframework" level="warn" />
	
	<!--系统操作日志-->
    <root level="info">
      	<appender-ref ref="console" />
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    </root>

</configuration> 
  • 异步配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 日志存放路径 -->
	<property name="log.path" value="/data/xjdoc/logs" />
    <!-- 日志输出格式 -->
	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

	<!-- 控制台输出 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>
	
	<!-- 系统日志输出 -->
	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/sys-info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
	</appender>
	
	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/sys-error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
			<!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
			<!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="async_file_info" class="ch.qos.logback.classic.AsyncAppender">
        <!--  当队列的剩余容量小于这个阈值并且当前日志level为 TRACE, DEBUG or INFO ,则丢弃这些日志。  -->
        <discardingThreshold>0</discardingThreshold>
        <!--  更改默认的队列的深度,该值会影响性能.默认值为256  -->
        <queueSize>1024</queueSize>
        <!--  新增这行为了打印栈堆信息  -->
        <includeCallerData>true</includeCallerData>
        <!--  添加附加的appender,最多只能添加一个  -->
        <appender-ref ref="file_info"/>
    </appender>
    <appender name="async_file_error" class="ch.qos.logback.classic.AsyncAppender">
        <!--  当队列的剩余容量小于这个阈值并且当前日志level为 TRACE, DEBUG or INFO ,则丢弃这些日志。  -->
        <discardingThreshold>0</discardingThreshold>
        <!--  更改默认的队列的深度,该值会影响性能.默认值为256  -->
        <queueSize>1024</queueSize>
        <!--  新增这行为了打印栈堆信息  -->
        <includeCallerData>true</includeCallerData>
        <!--  添加附加的appender,最多只能添加一个  -->
        <appender-ref ref="file_error"/>
    </appender>
    <appender name="async_file_debug" class="ch.qos.logback.classic.AsyncAppender">
        <!--  当队列的剩余容量小于这个阈值并且当前日志level为 TRACE, DEBUG or INFO ,则丢弃这些日志。  -->
        <discardingThreshold>0</discardingThreshold>
        <!--  更改默认的队列的深度,该值会影响性能.默认值为256  -->
        <queueSize>1024</queueSize>
        <!--  新增这行为了打印栈堆信息  -->
        <includeCallerData>true</includeCallerData>
        <!--  添加附加的appender,最多只能添加一个  -->
        <appender-ref ref="file_debug"/>
    </appender>

    <!-- 系统模块日志级别控制  -->
    <logger name="cn.xj" level="info" />
    <!-- Spring日志级别控制  -->
    <logger name="org.springframework" level="warn" />

	
	<!--系统操作日志-->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="async_file_info" />
        <appender-ref ref="async_file_error" />
    </root>

</configuration> 

logback.xml的配置详解

配置文件基本结构如下:

_20231219173450.jpg

property

    <!-- 日志存放路径 -->
 <property name="log.path" value="/data/xjdoc/logs" />
    <!-- 日志输出格式 -->
 <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

<property> 元素用于定义属性,允许在配置文件的其他地方引用这些属性;说明如下:

log.path

这行配置定义了一个名为 log.path 的属性,其值为 /data/xjdoc/logs。这个属性可以在配置文件的其他地方通过 ${log.path} 进行引用。这种属性的定义用于集中管理日志存放路径,方便在多处引用时进行统一修改。

log.pattern

这行配置定义了一个名为 log.pattern 的属性,其值为一个复杂的日志输出格式。这个属性可以在配置文件的其他地方通过 ${log.pattern} 进行引用。这种属性的定义用于集中管理日志输出格式,方便在多处引用时进行统一修改。

  • %d{HH:mm:ss.SSS}: 输出日志的时间戳,精确到毫秒。
转换模式结果示例
%d2006-10-20 14:06:49,812
%date2006-10-20 14:06:49,812
%date{ISO8601}2006-10-20 14:06:49,812
%date{HH:mm:ss.SSS}14:06:49.812
%d{HH:mm:ss.SSS}14:06:49.812
%date{dd MMM yyyy;HH:mm:ss.SSS}20 oct. 2006;14:06:49.812
  • [%thread]: 输出线程名。
  • %-5level: 输出日志级别,左对齐占5个字符的宽度。
  • %logger{20}: 输出 logger 名称,占20个字符的宽度。
  • [%method,%line]: 输出调用方法和行号。
  • %msg: 输出日志消息。
  • %n: 输出平台特定的换行符。

appender

 <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
     <file>${log.path}/sys-info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
   <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
   <!-- 日志最大的历史 60天 -->
   <maxHistory>60</maxHistory>
  </rollingPolicy>
  <encoder>
   <pattern>${log.pattern}</pattern>
  </encoder>
  <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
 </appender>

<appender> 元素

  • ConsoleAppender(控制台输出)

class=“ch.qos.logback.core.ConsoleAppender”

用于将日志输出到控制台。

主要用于开发和调试时观察日志。

  • FileAppender(文件输出)
    class=“ch.qos.logback.core.FileAppender”

用于将日志输出到文件。

可以配置文件路径、文件名等参数。

  • RollingFileAppender(滚动文件输出)

class=“ch.qos.logback.core.RollingFileAppender”

在FileAppender的基础上,支持滚动策略,可以按照一定规则滚动创建日志文件,例如按时间、文件大小等。

  • AsyncAppender(异步输出)

class=“ch.qos.logback.core.AsyncAppender”

用于异步输出日志,可以提高性能,特别适用于高吞吐的应用。

包装其他Appender,将日志记录过程异步执行。

滚动策略 (<rollingPolicy> 元素)

  • TimeBasedRollingPolicy(基于时间的滚动策略)

基于时间的滚动策略,按照一定的时间间隔滚动创建新的日志文件。

fileNamePattern 属性定义了日志文件名的格式,可以包含时间相关的占位符,例如 %d{yyyy-MM-dd}。

  • SizeAndTimeBasedRollingPolicy(基于时间和大小的滚动策略)

同时基于时间和文件大小的滚动策略,既可以按照时间滚动,又可以在达到一定文件大小时滚动创建新的日志文件。

fileNamePattern 属性定义了日志文件名的格式,可以包含时间相关的占位符,例如 %d{yyyy-MM-dd}。

maxFileSize 属性定义了每个日志文件的最大大小。

  • FixedWindowRollingPolicy(固定窗口的滚动策略)

固定窗口的滚动策略,按照一定的窗口大小滚动创建新的日志文件。

  • SizeBasedTriggeringPolicy(基于大小触发滚动策略)

基于文件大小触发滚动的策略,当当前日志文件大小达到一定阈值时触发滚动。

  • TimeBasedFileNamingAndTriggeringPolicy(基于时间的文件命名和触发策略)

基于时间的文件命名和触发策略,按照一定的时间间隔和文件名格式触发滚动。

<encoder> 元素

用于配置日志的输出格式,${log.pattern} 引用了之前定义的 log.pattern 属性,以保持一致的日志输出格式。

<filter> 元素

  • 使用 ch.qos.logback.classic.filter.LevelFilter 过滤器,仅接受 INFO 级别的日志记录。
  • onMatch 指定匹配时的操作为接受(ACCEPT)。
  • onMismatch 指定不匹配时的操作为拒绝(DENY)。

logger

    <!-- 系统模块日志级别控制  -->
    <logger name="cn.xj" level="info" />
    <!-- Spring日志级别控制  -->
    <logger name="org.springframework" level="warn" />

name 属性

通常使用类名或者包名来指定 Logger。

level 属性

level 属性定义了日志级别,表示记录的日志消息级别。可选值包括 trace、debug、info、warn、error。

  • TRACE(追踪)

TRACE 是最低级别的日志,用于记录程序的详细执行信息。

这个级别通常用于调试,输出对程序执行流程的跟踪信息。

TRACE 级别的日志量较大,一般情况下不会在生产环境中启用。

  • DEBUG(调试)

DEBUG 级别用于输出调试信息,有助于开发者定位和解决问题。

DEBUG 日志通常包含详细的变量信息、方法调用堆栈等。

在开发和测试阶段中,可以启用 DEBUG 日志以获取更多的信息。

  • INFO(信息)

INFO 级别用于记录一般性的信息,表示程序执行的正常流程。

INFO 日志用于显示重要的运行时信息,通常在生产环境中启用。

这是默认的日志级别,如果没有明确指定级别,则使用 INFO。

  • WARN(警告)

WARN 级别用于记录一些可能需要关注的问题,但不会导致程序失败。

WARN 日志表明程序可能遇到了某些问题或潜在的错误,但仍然可以继续执行。

这是一个提醒性的级别。

  • ERROR(错误)

ERROR 级别用于记录程序的错误和异常情况。

ERROR 日志表示程序遇到了严重的问题,可能导致程序崩溃或无法正常运行。

ERROR 级别的日志通常需要开发者及时关注和处理。

root

在 Logback 配置文件中,<root> 元素用于配置根 Logger,它是整个日志系统的根节点。根 Logger 拥有最高级别,通常用于设置全局的日志级别和全局的 Appender(附加器)。

    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="async_file_info" />
        <appender-ref ref="async_file_error" />
    </root>

level 属性

level 属性定义了根 Logger 的默认日志级别,表示整个日志系统的最低输出级别。例如,上例中设置为 INFO,表示只输出 INFO 级别及以上的日志。

<appender-ref> 元素

<appender-ref> 元素用于引用一个或多个 Appender,将其关联到根 Logger,即设置根 Logger 的输出目的地。可以有多个<appender-ref>元素,表示将日志输出到多个目的地。

总结

Logback 是一个强大且灵活的日志框架,它为 Java 应用程序提供了先进的日志记录功能。通过合理配置,可以满足各种应用场景的需求,从而更好地帮助开发者监控和调试应用程序。希望本文对 Logback 的简介和配置提供了清晰的指导,使你能更好地使用 Logback 进行日志记录。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka核心参数(带完善)

客户端 api Kafka提供了以下两套客户端API HighLevel(重点)LowLevel HighLevel API封装了kafka的运行细节&#xff0c;使用起来比较简单&#xff0c;是企业开发过程中最常用的客户端API。 而LowLevel API则需要客户端自己管理Kafka的运行细节&#xff0c;Partition&#x…

RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及消费收发实战

文章目录 Spring Cloud Alibaba 集成 RocketMQ 最佳实践集成依赖DashBoard消息收发实战 Spring Cloud Alibaba 集成 RocketMQ 最佳实践 SpringBoot 相对于 SSM 来说已经很大程度上简化了开发&#xff0c;但是使用 SpringBoot 集成一些第三方的框架&#xff0c;还是需要花费一些…

Node.js 工作线程与子进程:应该使用哪一个

Node.js 工作线程与子进程&#xff1a;应该使用哪一个 并行处理在计算密集型应用程序中起着至关重要的作用。例如&#xff0c;考虑一个确定给定数字是否为素数的应用程序。如果我们熟悉素数&#xff0c;我们就会知道必须从 1 遍历到该数的平方根才能确定它是否是素数&#xff…

搭建知识付费平台?明理信息科技为你提供全程解决方案

明理信息科技saas知识付费平台 在当今数字化时代&#xff0c;知识付费已经成为一种趋势&#xff0c;越来越多的人愿意为有价值的知识付费。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。同时&#xff0c;开发和维护…

Python Pandas Excel/csv文件的保存与读取(第14讲)

Python Pandas Excel/csv文件的读取于保存(第14讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

在 Kubernetes 上部署 Python 3.7、Chrome 和 Chromedriver(版本 114.0.5735.90)的完整指南

一、构建基础镜像 docker build -f /u01/isi/DockerFile . -t thinking_code.com/xhh/crawler_base_image:v1.0.2docker push thinking_code.com/xhh/crawler_base_image:v1.0.2 二、K8s运行Pod 三、DockerFile文件 # 基于镜像基础 FROM python:3.7# 设置代码文件夹工作目录…

【论文解读】Comparing VVC, HEVC and AV1 using Objective and Subjective Assessments

时间&#xff1a;2020 级别&#xff1a;IEEE 机构&#xff1a; IEEE 组织 摘要&#xff1a; 对3种最新的视频编码标准HEVC (High Efficiency video Coding)测试模型HM (High Efficiency video Coding)、amedia video 1 (AV1)和Versatile video Coding测试模型 (VTM)进行了客观和…

关于“Python”的核心知识点整理大全25

目录 10.3.4 else 代码块、 10.3.5 处理 FileNotFoundError 异常 alice.py 在这个示例中&#xff0c;try代码块引发FileNotFoundError异常&#xff0c;因此Python找出与该错误匹配的 except代码块&#xff0c;并运行其中的代码。最终的结果是显示一条友好的错误消息&#x…

抖音直播间websocket礼物和弹幕消息推送可能出现重复的情况,解决办法

在抖音直播间里&#xff0c;通过websocket收到的礼物消息数据格式如下&#xff1a; {common: {method: WebcastGiftMessage,msgId: 7283420150152942632,roomId: 7283413007005207308,createTime: 1695803662805,isShowMsg: True,describe: 莎***:送给主播 1个入团卡,priority…

速学数据结构 | 二叉树堆的实现详解篇

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 &#x1f308;hello&#xff01; 各位宝子们大家好啊&#xff0c;二叉树的概念大家都了解了那么我们…

自动驾驶学习笔记(十九)——Planning模块

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo 社区开发者圆桌会》免费报名—>传送门 文章目录 前言 Planning作用 Planning内容 Plannin…

uni-app ucharts中饼图与圆环图区别

项目情况&#xff1a; uni-app的用于移动端H5项目&#xff0c;包使用uni_modules目录存放。 图表引用ucharts中的echarts配置的组件方式 区别1 饼图与圆环图在echarts使用的配置都是pie类型。但是配置raduis使用&#xff1a; radius: [40%, 70%] 区别2 组件type指明&#xf…

保护您的Android应用程序:Android应用程序安全一览

保护您的Android应用程序&#xff1a;Android应用程序安全一览 我们都知道Android是为所有人设计的——开放、面向开发者、面向用户&#xff0c;这种开放性为今天和明天的移动技术提供了很多便利。然而&#xff0c;开放性也带来了需要妥善处理的安全风险。 安全是我们所有人都…

广州华锐互动VRAR:利用VR开展新能源汽车触电安全演练,降低培训成本和风险

随着新能源汽车行业的快速发展&#xff0c;相关的安全培训也变得越来越重要。其中&#xff0c;触电急救培训对于保障驾驶员和乘客的安全具有重要意义。传统培训方式存在一些不足&#xff0c;而利用VR技术进行培训则具有很多优势。 利用VR技术开展新能源汽车触电安全演练可以在模…

ansible模块 (7-13)

模块 7、hostname模块&#xff1a; 远程主机名管理模块 ansible 192.168.10.202 -m hostname -a nameliu 8、copy模块&#xff1a; 用于复制指定的主机文件到远程主机的模块 常用参数&#xff1a; dest: 指出要复制的文件在哪&#xff0c;必须使用绝对路径。如果源目标是…

fastjson1.2.24 反序列化漏洞(CVE-2017-18349)分析

FastJson在< 1.2.24 版本中存在反序列化漏洞&#xff0c;主要原因FastJson支持的两个特性&#xff1a; fastjson反序列化时&#xff0c;JSON字符串中的type字段&#xff0c;用来表明指定反序列化的目标恶意对象类。fastjson反序列化时&#xff0c;字符串时会自动调用恶意对…

运维知识点-Kubernetes_K8s

Kubernetes RBAC配置不当攻击场景攻击过程 RBAC配置不当 Service Account本质是服务账号&#xff0c;是Pod连接K8s集群的凭证。 在默认情况下&#xff0c;系统会为创建的Pod提供一个默认的Service Account&#xff0c; 用户也可以自定义Service Account&#xff0c;与Service…

【软件安全实验】使用Find Security Bugs工具静态分析WebGoat

文章目录 实验要求实验步骤一、在IntelliJ上安装插件配置规则库二、下载WebGoat源代码三、Find Security Bugs工具静态分析WebGoat 实验要求 用Find Security Bugs(http://find-sec-bugs.github.io)工具静态分析WebGoat。WebGoat是OWASP组织研制出的用于进行Web漏洞实验的应用…

C语言—每日选择题—Day52

第一题 1. 执行c程序代码&#xff0c;a,b,c,d的值分别为&#xff08;&#xff09; int a 1; int b 0; int c 0; int d (a) * (c 1); A&#xff1a;2&#xff0c;0&#xff0c;1&#xff0c;2 B&#xff1a;1&#xff0c;0&#xff0c;1&#xff0c;1 C&#xff1a;2&…

C++第一讲之初入C++

注&#xff1a;本文是对于学完C语言再学C同学的讲解&#xff0c;主要补充C与C语言不同之处&#xff0c;如果你没学过C语言&#xff0c;不建议观看本文。 一.C简介 我们都知道C语言是过程性语言&#xff08;强调的是实现过程&#xff09;&#xff0c;即对计算机语言要处理的两…