Logback框架基本认识

文章目录

  • 一.什么是Logback
    • 1.1 初识Logbcak
  • 二.Logbcak的结构
  • 三.日志的级别
  • 四.配置组件详解
    • 4.1 logger 日志记录器
      • 属性的介绍
      • 如何在配置文件里配置
    • 4.2 appender 附加器 配合日志记录器的输出格式
      • 4.2.1 控制台附加器
      • 4.2.2 文件附加器
      • 4.3.3滚动文件附加器
    • 4.3 Filter: 过滤器,用于根据指定的条件过滤日志。
  • 五.springboot整合logbcak

一.什么是Logback

Logback 旨在作为流行的 log4j 项目的继承者。它是由 log4j 的创始人 Ceki Gülcü 设计的。它建立在十年来设计工业级测井系统的经验之上。由此产生的产品,即 logback,比所有现有的日志系统速度更快,占用空间更小,有时甚至相差很大。同样重要的是,logback 提供了其他日志系统所缺少的 独特且相当有用的功能。

看了上述文字的说明,我们是否对logback还有些困惑,我们可以开始使用logback的第一个程序,来认识一下logbcak

1.1 初识Logbcak

  • 1.创建Maven项目
    在这里插入图片描述

  • 2.增加maven依赖

    <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.36</version></dependency>
  • 3.新建第一个helloword程序
package com.gongli;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** Hello world!**/public class App {private static final Logger logger= LoggerFactory.getLogger(App.class);public static void main(String[] args) {logger.info("hello world");}
}

这段代码展示了如何使用日志记录器来记录程序的运行信息。它创建了一个名为 App 的类,并在其中定义了一个 main 方法。在 main 方法中,它使用 LoggerFactory 类获取了一个日志记录器对象,并使用该对象记录了一条信息日志。

二.Logbcak的结构

认识到第一个日入门日志以后,我们就开始认识Logbcak的结构。如图:
在这里插入图片描述

Logger, Appender 和 Layouts

Logback 构建在三个主要的类上:Logger,Appender 和 Layouts。这三个不同类型的组件一起作用能够让开发者根据消息的类型以及日志的级别来打印日志。
Logger 类作为 logback-classic 模块的一部分。Appender 与 Layouts 接口作为 logback-core 的一部分。作为一个通用的模块,logback-core 没有 logger 的概念。

三.日志的级别

在具体了解日志配置文件之间,我们必须先知道日志的级别是什么?
日志级别用于控制哪些日志会被记录。日志级别从高到低依次为:

FATAL: 致命错误,表示程序无法继续运行。
ERROR: 错误,表示程序发生了错误,但仍能继续运行。
WARN: 警告,表示程序可能发生错误,但不影响程序的正常运行。
INFO: 信息,用于记录程序的正常运行状态。
DEBUG: 调试,用于记录程序的运行细节。
TRACE: 跟踪,用于记录程序的运行轨迹。

大小从上往下依次减小,这条规则是 logback 的核心。它假设级别按如下顺序排序: TRACE < DEBUG < INFO < WARN < ERROR。

例如以下程序,我设父类日志的级别为error ,你猜一下子类的日志级别info会正常输出吗?

    public static void main(String[] args) {//我设父类的日志级别为Infoch.qos.logback.classic.Logger logger1=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com");logger1.setLevel(Level.ERROR);logger1.info("hello world");}

答案是显然不会
在这里插入图片描述
我们再来做一个实验,如果我们指定了根的日志级别,也指定了根的子类级别。你想想看我们的日志级别是遵守根的,还是遵守子类的呢?话不多说,我们来试试看。

  public static void main(String[] args) {//我设父类的日志级别为Infoch.qos.logback.classic.Logger logger1=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.gongli.App");ch.qos.logback.classic.Logger rootlogger=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);rootlogger.setLevel(Level.WARN);logger1.setLevel(Level.INFO);System.out.println(logger1.getEffectiveLevel());logger1.trace("hello world");}

事实证明,在我子类设置的情况下,我们会遵循子类的日志级别
在这里插入图片描述
从而我们得出一个结论,如果子类包没设置级别,就会往上一级找,如果上一级也没设置,就默认日志级别打印。
在这里插入图片描述

四.配置组件详解

4.1 logger 日志记录器

属性的介绍

每个记录器Logger的属性有两个属性

  • name属性:记录器的名称

  • level尾性(可选): 记录的级别,允许的级别从低到高,TRACE< DEBUG<INFO< WARN<ERROR
    logger.setLevel()
    logger.getLevel():
    logger.getEffectiveLevel()
    additivity属性(可选): 是否允许爱加打印日志,true或false

  • 说明:
    1)如果记录器未设置level属性,则该记录器的级别从上级记录器继承
    2)如果想查看记录器的级别,应该通过logger.getEffectiveLevel方法,同时要将Logger转为
    ch.qos.logback.classic.Logger类型,如下:
    ch.gos.logbackclassic.Logger logger =
    (ch.qos.logbackclassic.Logger) LoggerFactory.getLogger(App.class);

举一个代码的例子,你们就懂我在说什么了

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class App {private static final Logger logger = LoggerFactory.getLogger(App.class);public static void main(String[] args) {// 设置 logger 的名称logger.setName("MyLogger");// 设置 logger 的级别logger.setLevel(Level.INFO);// 获取 logger 的级别Level level = logger.getLevel();// 获取 logger 的有效级别Level effectiveLevel = logger.getEffectiveLevel();// 检查 logger 的 additivity 属性boolean additivity = logger.isAdditive();System.out.println("logger 的名称:" + logger.getName());System.out.println("logger 的级别:" + level);System.out.println("logger 的有效级别:" + effectiveLevel);System.out.println("logger 的 additivity 属性:" + additivity);}
}

如何在配置文件里配置

使用logback-test.xml或 logback.xml进行配置
这里分为两步
1.新建一个logback.xml
文件内容如下:

<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"><root level="debug"> // 设置root的</root><logger name="com.aa" level="error"></logger> //声明一个记录器
</configuration>

2.编写java代码

 public static void main(String[] args) {ch.qos.logback.classic.Logger rootlogger=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("root");System.out.println(rootlogger.getEffectiveLevel());ch.qos.logback.classic.Logger logger=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.aa");System.out.println(logger.getEffectiveLevel());}
}

4.2 appender 附加器 配合日志记录器的输出格式

Logback 将写入日志事件的任务委托给称为附加程序的组件。Appender 必须实现该日志记录器的 接口。
常用的附加器如下:
控制台附加器:ch.qos.logback.core.ConsoleAppender
文件附加器: ch.qos.logback.core.FileAppender
滚动文件附加器: ch.gos.logback.core.rolling.RollingFileAppender

4.2.1 控制台附加器

控制台附加器(ch.qos.logback.core.ConsoleAppender)的常用参数如下:

name:附加器的名称。
encoder:编码器。
target:目标。默认为 System.out。
encoding:编码。默认为 UTF-8。
immediateFlush:是否立即刷新。默认为 true。
filter:日志过滤器。
以下是这些参数的具体说明:

  • name
    name 属性指定附加器的名称。名称用于标识附加器。

  • encoder
    encoder 属性指定编码器。编码器用于格式化日志。

  • target
    target 属性指定目标。目标用于指定日志输出的位置。默认为 System.out。

  • encoding
    encoding 属性指定编码。编码用于指定日志的编码格式。默认为 UTF-8。

  • immediateFlush
    immediateFlush 属性指定是否立即刷新。如果为 true,则日志将在写入到控制台之前立即刷新。如果为 false,则日志将在缓冲区满时刷新。

  • filter
    filter 属性指定日志过滤器。日志过滤器用于过滤日志。
    例子:
    logback.xml文件配置如下

<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd">//这里就是声明控制台附加器<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder> //日志格式化格式<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder></appender><logger name="com.gongli" level="info">//加入附加器<appender-ref ref="STDOUT" /></logger>
</configuration>

代码如下:

   public static void main(String[] args) {ch.qos.logback.classic.Logger logger1=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.gongli.App");logger1.info("hello world");}
}

在这里插入图片描述

4.2.2 文件附加器

文件附加器(ch.qos.logback.core.FileAppender)的常用参数如下:

name:附加器的名称。
file:日志文件的路径。
append:是否追加日志。默认为 true。
encoder:编码器。
rollingPolicy:滚动策略。
filter:日志过滤器。
以下是这些参数的具体说明:

  • name
    name 属性指定附加器的名称。名称用于标识附加器。

  • file
    file 属性指定日志文件的路径。

  • append
    append 属性指定是否追加日志。如果为 true,则日志将追加到现有文件中。如果为 false,则日志将覆盖现有文件。

  • encoder
    encoder 属性指定编码器。编码器用于格式化日志。

  • rollingPolicy
    rollingPolicy 属性指定滚动策略。滚动策略用于控制日志文件的滚动方式。

  • filter
    filter 属性指定日志过滤器。日志过滤器用于过滤日志。
    例子
    logbcak.xml文件

<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder></appender><appender name="File" class="ch.qos.logback.core.FileAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder><file>myfile.log</file>//文档<append>true</append> //是否追加数据</appender><logger name="com.gongli" level="info"><appender-ref ref="STDOUT" /><appender-ref ref="File" /></logger>
</configuration>

java代码

  public static void main(String[] args) {ch.qos.logback.classic.Logger logger1=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.gongli.App");logger1.info("hello world");}
}

在这里插入图片描述

4.3.3滚动文件附加器

这里要特别说明一下这几个参数
Logback 提供了多种滚动策略,包括:
SizeBasedRollingPolicy:根据文件大小滚动日志文件。(ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy)
TimeBasedRollingPolicy:根据时间滚动日志文件。(ch.qos.logback.core.rolling.TimeBasedRollingPolicy)
说说他们之间的区别
区别

SizeBasedRollingPolicy 和 TimeBasedRollingPolicy 的主要区别在于滚动触发条件的不同。SizeBasedRollingPolicy 的滚动触发条件是文件大小,而 TimeBasedRollingPolicy 的滚动触发条件是时间。
例如:

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>/var/log/myapp.log</file><append>true</append><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><maxFileSize>10MB  </maxFileSize></maxHistory>30</maxHistory></rollingPolicy>
</appender>

在上述配置中,maxFileSize 属性指定日志文件的最大大小为 10MB。当日志文件的大小达到 10MB 时,将会创建一个新的日志文件,并将原来的日志文件重命名为 myapp.log.1。

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>/var/log/myapp.log</file><append>true</append><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>myapp.log.%d{yyyy-MM-dd}</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy>
</appender>

在上述配置中,fileNamePattern 属性指定新日志文件的文件名模式为 myapp.log.yyyy-MM-dd。也就是说,每天将会创建一个新的日志文件。

4.3 Filter: 过滤器,用于根据指定的条件过滤日志。

过滤器是附加器的一个组件,它用于决定附加器是否输出日志。一个附加器可以包合一个或多个过滤器。
每个过滤器都会返回一个枚举值,可选的值: DENY、 NEUTRAL、ACCEPT
附加器根据过滤器返回值判断是否输出日志:
DENY : 不输出日志
ACCEPT: 输出日志
NEUTRAL : 中立,即不决定是否输出日志

常用的过滤器如下:
LevelFilter(级别过滤器): 实现类 ch.qos.logback.classic.filter.LevelFilter
ThresholdFilter(闽值过滤器): 实现类 ch.gos.logback.classic.filter.ThresholdFilter
EvaluatorFilter(评估者过滤器): 实现类 ch.qos.logback.core.filter.EvaluatorFilter
JaninoEventEvaluator过滤器: 实现类 ch.qos.logback.core.filter.EvaluatorFilter
TurboFilter涡轮过滤器
DuplicateMessageFilter 重复消息过滤器

这里举一个简单的例子LevelFilter(级别过滤器)

   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><OnMatch>ACCEPT</OnMatch><onMismatch>DENY</onMismatch></filter><logger name="com.gongli" level="info"><appender-ref ref="STDOUT" /></logger>

具体说明:
如果程序记录了一条 INFO 级别的日志,由于其级别与 level 属性匹配,会被 OnMatch 属性接受,因此会输出到控制台。
如果程序记录了一条 DEBUG 级别的日志,由于其级别低于 level 属性,会被 onMismatch 属性拒绝,因此不会输出到控制台。

五.springboot整合logbcak

Spring Boot 默认使用 Logback 作为日志框架。要将 Logback 整合到 Spring Boot 项目中,只需在项目的 pom.xml 文件中添加以下依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>
</dependencies>

接下来,需要在项目的 application.properties 文件中配置 Logback。Logback 的配置文件格式为 XML。可以使用以下示例来配置 Logback:

logging.config=classpath:my-logback.xml

然后我们在resource下面新建my-logback.xml
文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder></appender><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>myapp.log</file><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>myapp.log.%d{yyyy-MM-dd}</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy></appender><logger name="com.example.myapp" level="DEBUG"><appender-ref ref="STDOUT" /><appender-ref ref="FILE" /></logger><root level="INFO"><appender-ref ref="STDOUT" /></root></configuration>

如果大家想深入了解logbcak,建议去它的官网去看看,内容给很多,我把官网粘在这里里
https://logback.qos.ch/manual/introduction.html

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

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

相关文章

记录一次应用服务响应慢问题排查过程

3个自建系统使用了一个统一的外部系统接入服务&#xff0c;该服务主要是统一处理外部系统对接&#xff0c;处理掉数据鉴权等问题&#xff0c;提供内部鉴权接口给自己的服务使用。类似一个对接网关。 问题背景 研发反应&#xff0c;后端接口请求时快时慢&#xff0c;影响演示效…

【MATLAB】快速绘制曲线图的形状,粗细,颜色

目录 MATLAB 快速绘制曲线图的形状&#xff0c;粗细&#xff0c;颜色 1.通过改变R-G-B 的值改变线条的颜色&#xff1a;2.通过改变c∈[1,∞)的值改变线条的粗细&#xff1a;3.线条形状&#xff0c;粗细&#xff0c;颜色选择&#xff1a;4.Matlab中画图实现案例&#xff1a; MA…

js封装根据年月日获取星座效果demo(整理)

//根据年月日获取星座 function getZodiacSign(dateString) {// 用法:const dateStr 2024-01-11;// const zodiacSign getZodiacSign(dateStr);const date new Date(dateString);const month date.getMonth() 1;const day date.getDate();if ((month 1 && day &…

Python教程39:使用turtle画美国队长盾牌

---------------turtle源码集合--------------- Python教程36&#xff1a;海龟画图turtle写春联 Python源码35&#xff1a;海龟画图turtle画中国结 Python源码31&#xff1a;海龟画图turtle画七道彩虹 Python源码30&#xff1a;海龟画图turtle画紫色的小熊 Python源码29&a…

【uview2.0】Keyboard 键盘 与 CodeInput 验证码输入 结合使用 uview

https://www.uviewui.com/components/codeInput.html &#xff08;CodeInput 验证码输入&#xff09; https://www.uviewui.com/components/keyboard.html &#xff08;Keyboard 键盘&#xff09; <u-keyboard mode"number" :dotDisabled"true" :show&q…

一体式气象站的优点是什么?带大家了解一下

一体式气象站是一款高度集成、低功耗、可快速安装、便于野外监测使用的高精度自动气象观测设备。 一体式气象站的优点主要体现在以下几个方面&#xff1a; 集成度高&#xff1a;一体式气象站集成了多种气象传感器、数据处理单元、显示单元和通讯模块等&#xff0c;可以同时监…

2019年认证杯SPSSPRO杯数学建模B题(第一阶段)外星语词典全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于方差分布的方法对未知语言文本中重复片段的自动搜索问题的研究 B题 外星语词典 原题再现&#xff1a; 我们发现了一种未知的语言&#xff0c;现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本&#xff0c;但…

2024年【熔化焊接与热切割】考试内容及熔化焊接与热切割免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试内容是安全生产模拟考试一点通总题库中生成的一套熔化焊接与热切割免费试题&#xff0c;安全生产模拟考试一点通上熔化焊接与热切割作业手机同步练习。2024年【熔化焊接与热切割】考试内容及熔化…

ceph、gluster、longhorn选型对比

Ceph Ceph是一个分布式的存储系统&#xff0c;可以在统一的系统中提供唯一的对象、块和文件存储。 名词解释&#xff1a; RADOS&#xff1a; 由自我修复、自我管理、智能存储节点组成的可靠、自主、分布式对象存储LIBRADOS&#xff1a; 一个允许应用程序直接访问 RADO 的库&…

怎么做拼团链接_生鲜果蔬商家都在用的小程序拼团系统

拼团链接&#xff1a;重塑营销新格局 在当今这个信息爆炸的时代&#xff0c;消费者面对海量信息&#xff0c;选择变得尤为重要。如何在众多品牌中脱颖而出&#xff0c;让消费者愿意主动为你驻足&#xff1f;答案就是——拼团链接。 拼团&#xff0c;是一种社交电商的创新形式。…

Clickhouse实时指标加工

Starwift实时指标加工方案 方案介绍 ​ Starwift(ClickHouse)是京东云上的一款云原生数据仓库,为用户带来极速分析体验,能够支撑实时数据分析和海量数据离线分析。便捷的弹性扩缩容能力,极致分析性能和丰富的企业级特性,助力客户数字化转型。实时指标加工是从离线指标加…

Windows RPC运行时漏洞事后总结

2022年4月前后&#xff0c;Windows RPC运行时被曝出存在远程代码执行漏洞&#xff0c;当时曾引起很多人广泛关注。微软很快做出反应&#xff0c;发布补丁程序进行修补。这次事件中&#xff0c;Windows远程过程调用&#xff08;RPC&#xff09;运行时共出现三个关键漏洞&#xf…

Xcode15一个xcworkspace管理多个xcodeproj从零开始,一个主程序,多个子程序,一个主程序引用多个静态库

创建主程序&#xff1a;MainProject 目录结构&#xff1a; sandbox设置成NO&#xff1a;否则Xcode15不能运行 创建子程序 创建Framework 创建多个子程序后的目录结构 在主程序的Podfile中添加代码 # Uncomment the next line to define a global platform for your project pla…

Zabbix6.4 监控系统 密码忘记怎么办

Zabbix6.4 监控系统 密码忘记怎么办&#xff1f; 如下图 本次主要介绍在Zabbix6.4中重置用户密码的步骤。 步骤 如果您忘记了Zabbix密码并且无法登录&#xff0c;请向Zabbix管理员求助。 超级管理员用户可以在用户配置表单中更改所有用户的密码。 如果超级用户忘记了密码&a…

U8 内嵌.Net UserControl,winform挂菜单

目录 1.创建类库2.项目引用U8安装路径dll&#xff1a;3.新建类MyLoginable 继承 NetLoginable&#xff1a;4.新建类 MyNetUserControl 实现接口 INetUserControl&#xff1a;5.新建类 NetSampleDelegate 实现上面的CreateToolbar方法6.新建你的用户控件7.最后一步到UAP挂接菜单…

【设计模式-02】Strategy策略模式及应用场景

一、参考资料 Java 官方文档 Overview (Java SE 18 & JDK 18)module indexhttps://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 & JDK 18)declaration: module: java.base, pa…

计算数学表达式的程序(Java课程设计)

1. 课设团队介绍 团队名称 团队成 员介绍 任务分配 团队成员博客 XQ Warriors 徐维辉 负责计算器数据的算法操作&#xff0c;如平方数、加减乘除&#xff0c;显示历史计算记录 无 邱良厦&#xff08;组长&#xff09; 负责计算器的图形设计&#xff0c;把输入和结果显…

模型评估:ROC曲线

二值分类器&#xff08;Binary Classifier&#xff09;是机器学习领域中最常见也是应用最广泛的分类器。评价二值分类器的指标很多&#xff0c;比如precision、recall、F1 score、P-R曲线等。相比而言&#xff0c;ROC曲线有很多优点&#xff0c;经常作为评估而知分类器最重要的…

斯坦福Mobile ALOHA提到的ACT之外的另两项技术:Diffusion Policy、VINN

前言 本文接上一篇文章《斯坦福机器人Mobile ALOHA的关键技术&#xff1a;动作分块ACT的算法原理与代码剖析》而来&#xff0c;当然最开始本文是作为上一篇文章的第二、第三部分的 但因为ACT太过关键&#xff0c;除了在上一篇文章中写清楚其算法原理之外&#xff0c;还得再剖…

数控开料机对比木工雕刻机的优势

数控开料机和木工雕刻机都属于木工机械加工设备&#xff0c;都可以用来开料和雕刻&#xff0c;但在市场价格、床体结构、技术要求等方面二者存在不小的差异&#xff0c;那么全自动数控开料机对比普通木工雕刻机有什么优势呢。 首先我们都知道&#xff0c;木工雕刻机主要应用于…