版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
20XX/XX/XXJava日志框架实战:Logback与Log4j2全面指南汇报人:XXXCONTENTS目录01
日志框架概述与选型基础02
Logback框架实战指南03
Log4j2框架实战指南04
框架对比与性能调优05
异常处理与高级应用06
框架选型与迁移指南01日志框架概述与选型基础问题诊断与故障定位日志记录系统运行时异常堆栈、错误码及上下文信息,帮助开发者快速定位问题根源,减少故障排查时间。系统运行状态监控通过记录关键业务指标(如接口响应时间、并发量)和资源使用情况(CPU、内存),实时监控系统健康状态。业务行为追踪与审计记录用户操作轨迹、交易流水等信息,满足合规审计要求,同时支持业务数据分析与用户行为分析。性能瓶颈分析通过记录方法执行耗时、数据库查询时间等性能数据,识别系统瓶颈,为性能优化提供数据支持。日志在Java开发中的核心价值主流日志框架生态体系SLF4J:日志门面标准SLF4J作为日志抽象层,定义统一接口,解耦API与实现,支持Logback、Log4j2等框架切换,避免依赖冲突。Logback:原生SLF4J实现由Log4j创始人开发,包含core、classic、access模块,原生支持SLF4J,提供自动配置重载、灵活Appender等特性。Log4j2:高性能企业级方案Apache旗下升级版本,采用插件架构与Disruptor异步机制,支持动态配置、高级过滤,多线程场景吞吐量优于传统框架。框架关系与集成应用代码通过SLF4JAPI调用,底层绑定Logback或Log4j2实现;Logback原生集成SLF4J,Log4j2需桥接包适配。SLF4J日志门面规范解析
SLF4J的核心定位SLF4J(SimpleLoggingFacadeforJava)是一个日志门面(抽象层),它定义了统一的日志接口,不提供具体实现,允许用户在部署时选择不同的日志实现框架,如Logback、Log4j2等。
SLF4J的核心优势SLF4J的核心优势在于解耦日志API与实现,应用代码只需依赖SLF4JAPI,无需关心底层日志框架;同时能有效避免复杂项目中的日志框架冲突,统一日志接口。
SLF4J的典型应用代码通过SLF4JAPI获取Logger实例并记录日志的示例代码:importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;publicclassExample{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(Example.class);publicvoiddoSomething(){logger.debug("Debugmessage");("Infomessage");logger.error("Errormessage");}}
SLF4J与日志实现的绑定SLF4J通过绑定不同的日志实现框架来工作,例如Logback是SLF4J的原生实现,Log4j2则需要通过桥接包(如log4j-slf4j-impl)与SLF4J集成,从而实现通过SLF4JAPI调用Log4j2的功能。02Logback框架实战指南核心模块构成Logback由logback-core(基础模块)、logback-classic(SLF4J实现)和logback-access(Servlet集成模块)组成,其中classic模块是log4j的改良版本并原生支持SLF4J。三大核心组件Logger负责捕获日志事件,遵循层级结构和继承规则;Appender决定日志输出目标(控制台、文件等);Layout定义日志格式,如PatternLayout可配置时间戳、线程名等信息。配置文件加载顺序Logback启动时依次查找classpath下的logback-test.xml、logback.groovy、logback.xml,若均不存在则使用BasicConfigurator默认配置,将日志输出到控制台。日志事件处理流程日志事件由Logger触发,经Filter筛选后,符合条件的事件交由关联Appender输出,每个Appender可绑定独立Layout,实现不同目的地的日志格式差异化。Logback核心组件与工作原理Maven依赖配置与环境搭建
Logback基础依赖配置<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version></dependency>
Log4j2基础依赖配置<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.4.4</version></dependency>
SpringBoot切换日志框架排除默认Logback依赖:<exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion>
配置文件存放位置Logback配置文件logback.xml或logback-spring.xml,Log4j2配置文件log4j2.xml或log4j2-spring.xml,均放置于src/main/resources目录下logback.xml基础配置详解根节点与配置结构
logback.xml配置文件以<configuration>为根节点,包含属性定义、Appender配置和Logger设置三部分,支持自动加载与动态更新。控制台输出Appender配置
通过ConsoleAppender实现日志控制台输出,核心配置包括encoder与pattern,示例格式:%d{yyyy-MM-ddHH:mm:ss}[%thread]%-5level%logger{36}-%msg%n。文件输出Appender配置
使用RollingFileAppender实现日志文件输出,需指定file路径、rollingPolicy策略(如SizeAndTimeBasedRollingPolicy)及encoder格式。根日志级别与Appender引用
通过<root>节点设置全局日志级别(如INFO),并通过<appender-ref>引用已定义的Appender(如consoleLog、fileLog)。日志级别与输出格式配置日志级别定义与优先级日志级别从低到高依次为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL。优先级逐级递增,高优先级日志会覆盖低优先级设置。Logback级别配置示例在logback.xml中通过<rootlevel="INFO">设置根日志级别,可针对特定包配置独立级别,如<loggername="com.example.dao"level="DEBUG"/>。Log4j2级别配置示例在log4j2.xml中通过<Rootlevel="WARN">配置全局级别,支持通过<Loggername="org.hibernate"level="ERROR"/>对第三方库日志降级。日志输出格式核心元素标准日志格式包含时间戳(%d)、线程名([%thread])、日志级别(%-5level)、类名(%logger{36})和消息(%msg),如%d{yyyy-MM-ddHH:mm:ss}[%thread]%-5level%logger{36}-%msg%n。格式转换符应用技巧使用%replace进行敏感信息脱敏,如%replace(%msg){'(\d{11})','***'};通过%logger{36}限制类名长度,平衡可读性与简洁性。文件输出与滚动策略配置01Logback文件输出基础配置在logback.xml中通过<FileAppender>或<RollingFileAppender>实现文件输出,基础配置需指定<file>路径(如logs/application.log)和<encoder>格式化模式,支持按时间/大小触发滚动。02Logback滚动策略实现采用SizeAndTimeBasedRollingPolicy,配置fileNamePattern(如logs/app.%d{yyyy-MM-dd}_%i.log)、maxFileSize(如10MB)、maxHistory(如30天)和totalSizeCap(如100MB),实现基于时间和大小的混合滚动。03Log4j2文件输出与滚动配置在log4j2.xml中使用<RollingFile>Appender,通过TimeBasedTriggeringPolicy(按天滚动)和SizeBasedTriggeringPolicy(10MB触发)组合,设置filePattern(如logs/app-%d{yyyy-MM-dd}-%i.log.gz)及DefaultRolloverStrategy管理历史文件。04生产环境最佳实践建议日志文件路径使用绝对路径,开启压缩(.gz)节省磁盘空间,设置合理的maxHistory避免磁盘占满,核心业务系统可分离info/error日志到不同文件,便于问题定位。Logback异步日志实现方案AsyncAppender组件配置通过包装同步Appender实现异步,需在logback.xml中配置<AsyncAppender>标签,指定队列容量与阻塞策略。核心参数设置关键配置包括queueSize(默认256)控制缓冲区大小,discardingThreshold设置队列满时的日志丢弃阈值,neverBlock属性决定是否阻塞主线程。实现代码示例<appendername="ASYNC"class="ch.qos.logback.classic.AsyncAppender"><appender-refref="FILE"/><queueSize>512</queueSize></appender>适用场景与局限适合中低并发场景,避免高吞吐下的锁竞争问题;但相比Log4j2的Disruptor无锁设计,在极端并发下性能提升有限。配图中配图中配图中配图中Logback实战案例:完整配置示例基础依赖配置(Maven)<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency>多环境日志输出配置开发环境(DEBUG级别+控制台输出):<rootlevel="DEBUG"><appender-refref="consoleLog"/></root>;生产环境(INFO级别+文件输出):<rootlevel="INFO"><appender-refref="fileLog"/></root>日志轮转策略配置采用SizeAndTimeBasedRollingPolicy,按天+大小轮转:<fileNamePattern>logs/application.%d{yyyy-MM-dd}_%i.log</fileNamePattern><maxFileSize>10MB</maxFileSize><maxHistory>10</maxHistory><totalSizeCap>100MB</totalSizeCap>日志格式定义包含时间戳、线程名、级别、类名及消息:<pattern>%d{yyyy-MM-ddHH:mm:ss}[%thread]%-5level%logger{36}-%msg%n</pattern>代码中日志使用示例importorg.slf4j.LoggerFactory;privatestaticfinalLoggerlogger=LoggerFactory.getLogger(LogbackExample.class);logger.debug("Debugmessage");("Infomessage");03Log4j2框架实战指南Log4j2架构特性与优势分析插件化架构设计
Log4j2采用插件化架构,Appender、Layout、Filter等组件通过注解自动注册,支持自定义扩展,无需修改框架源码即可集成新功能。异步日志高性能实现
基于LMAXDisruptor无锁环形队列,多线程场景下异步日志吞吐量比Logback高18倍,延迟更低,有效避免I/O阻塞主线程。动态配置与热更新
支持配置文件自动重新加载,修改后无需重启应用即可生效,且重新配置过程中不会丢失日志事件,保证日志完整性。无垃圾机制优化
稳态日志记录时实现低垃圾/无垃圾操作,减少临时对象创建,降低GC压力,提升应用响应性能,尤其适合高并发场景。高级过滤与上下文支持
提供基于MDC的上下文日志、标记、正则表达式等高级过滤功能,可与记录器关联,实现精细化日志筛选与路由。Maven依赖配置与冲突解决
01Logback基础依赖配置<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.4.10</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.36</version></dependency>
02Log4j2依赖配置与默认框架排除排除SpringBoot默认Logback依赖:<exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion>,引入Log4j2依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>
03Log4j2异步日志依赖补充使用Disruptor提升异步性能:<dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.4.4</version></dependency>
04依赖冲突排查与解决通过Maven命令mvndependency:tree查看依赖树,使用<exclusion>标签排除冲突依赖,确保SLF4JAPI与日志实现版本匹配,避免NoClassDefFoundErrorlog4j2.xml核心配置详解
根配置节点与属性定义<Configuration>为根节点,可设置status属性控制内部日志级别,monitorInterval属性实现配置热更新。通过<Properties>定义变量,如日志路径${LOG_PATH}、格式${LOG_PATTERN},提升配置复用性。
Appender输出目的地配置ConsoleAppender将日志输出至控制台,配置Target为SYSTEM_OUT,使用PatternLayout定义输出格式。RollingFileAppender支持日志滚动,通过fileName指定当前日志文件,filePattern定义归档文件名,结合TimeBasedTriggeringPolicy和SizeBasedTriggeringPolicy实现按时间和大小轮转。
Logger层级与级别控制RootLogger为全局日志入口,设置level控制整体日志级别,通过<AppenderRef>关联Appender。可通过<Logger>标签为特定包路径配置独立级别,additivity="false"避免日志重复输出,实现精细化日志管理。
高级特性配置示例异步日志通过<Async>包装Appender或使用AsyncLogger,基于Disruptor提升性能;敏感信息脱敏可在PatternLayout中使用<Replace>标签,如将密码替换为***;多环境配置通过<SpringProfile>标签,根据activeprofile加载不同配置。Appender组件与高级特性
01核心Appender类型及应用场景ConsoleAppender:输出日志到控制台,适用于开发调试;FileAppender:将日志写入指定文件,适合简单文件存储;RollingFileAppender:支持日志轮转,解决单个文件过大问题,生产环境首选。
02Logback异步Appender配置通过<AsyncAppender>包装其他Appender实现异步,配置示例:<appendername="ASYNC"class="ch.qos.logback.classic.AsyncAppender"><appender-refref="FILE"/></appender>,需注意队列大小与溢出策略设置。
03Log4j2异步Logger与Disruptor基于LMAXDisruptor无锁环形队列实现,吞吐量比同步日志提升18倍,配置方式:<AsyncLoggername="com.example"level="DEBUG"includeLocation="true"><AppenderRefref="FILE"/></AsyncLogger>,需引入disruptor依赖。
04高级过滤与动态配置Logback支持LevelFilter、ThresholdFilter等,如只输出ERROR级别:<filterclass="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter>;Log4j2支持插件化过滤器,可基于MDC上下文动态过滤。Disruptor异步日志实现机制无锁环形队列核心架构Disruptor采用预分配固定容量的环形数组(RingBuffer)作为核心数据结构,通过序号(Sequence)机制实现生产者与消费者的高效协作,避免传统队列的锁竞争问题。高性能内存屏障技术利用CPU缓存行填充(CacheLinePadding)技术消除伪共享,结合volatile变量和有序内存屏障(OrderingMemoryBarriers),确保多线程环境下数据可见性与操作原子性。Log4j2异步日志集成方式Log4j2通过AsyncLogger组件集成Disruptor,日志事件先写入RingBuffer,由独立消费者线程异步处理I/O输出,支持全局异步、混合异步两种配置模式,队列默认容量262144条。对比传统阻塞队列优势相比LogbackAsyncAppender使用的ArrayBlockingQueue,Disruptor在高并发场景下吞吐量提升10倍以上,延迟降低80%,且通过对象复用策略显著减少GC压力。Log4j2实战案例:多环境配置开发环境配置策略开发环境建议日志级别设为DEBUG,输出至控制台便于实时调试。配置示例:<Rootlevel="DEBUG"><AppenderRefref="Console"/></Root>,可清晰展示详细调试信息。测试环境配置要点测试环境采用INFO级别,同时输出至控制台与文件。文件滚动策略可设为按天滚动,保留30天日志,如<maxHistory>30</maxHistory>,满足测试追溯需求。生产环境配置规范生产环境使用WARN级别,启用异步日志与敏感信息脱敏。通过<AsyncLogger>提升性能,配置<Replaceregex="(\\\"password\\\":\\\")(.*?)(\\\")"replacement="$1****$3"/>实现密码脱敏。SpringProfile集成方法利用SpringProfile实现多环境切换,如<SpringProfilename="prod">配置生产环境专属Appender,无需修改配置文件即可切换不同环境的日志策略。04框架对比与性能调优Logback与Log4j2功能特性对比
异步日志性能Log4j2基于LMAXDisruptor的异步日志机制,在高并发场景下吞吐量是LogbackAsyncAppender的10倍以上,延迟更低。
动态配置更新Log4j2支持配置文件修改后自动重新加载,且重新配置时不会丢失日志事件;Logback虽支持自动重载,但在重载过程中可能丢失日志。
插件机制Log4j2采用插件化架构,Appender、Layout等组件可通过注解自动注册,扩展性强;Logback插件机制较弱,扩展能力有限。
GC友好性Log4j2在稳态日志记录时实现无垃圾机制,减少临时对象创建,降低GC压力;Logback异步日志模式下对象创建和销毁较频繁,GC压力相对较高。
配置格式支持Log4j2支持XML、JSON、YAML等多种配置格式;Logback主要支持XML和Groovy格式配置。同步/异步日志性能测试对比
测试环境与指标说明测试环境:IntelXeon8核CPU,32GB内存,NVMeSSD;测试指标:吞吐量(日志条数/秒)、平均延迟(ms)、GC压力。
同步日志性能数据Logback同步:约4,200req/s,平均延迟18.7ms;Log4j2同步:约3,800req/s,平均延迟20.3ms,均存在I/O阻塞问题。
异步日志性能数据LogbackAsyncAppender:约9,600req/s,平均延迟6.3ms;Log4j2AsyncLogger:约17,000req/s,平均延迟2.1ms,吞吐量提升显著。
高并发场景对比结论Log4j2基于Disruptor的无锁异步机制,在高并发下吞吐量是Logback异步的1.8倍,延迟降低66%,适合日志密集型应用。日志输出性能优化策略
异步日志配置Log4j2采用LMAXDisruptor无锁环形队列实现异步日志,高并发下吞吐量可达Logback异步模式的10倍以上;Logback通过AsyncAppender包装同步Appender实现异步,需注意队列大小配置避免阻塞。
日志级别动态调整生产环境建议使用INFO或WARN级别,避免DEBUG级别的大量日志输出;可通过配置文件或动态管理接口,根据系统负载实时调整日志级别,平衡调试需求与性能开销。
日志格式精简优化减少不必要的日志字段,如类名缩写为36字符以内,避免使用%L(行号)、%M(方法名)等影响性能的转换符;生产环境日志格式建议包含时间戳、线程名、级别、类名和消息核心要素。
IO操作优化采用日志轮转策略,按大小(如10MB)和时间(如按天)切割文件,避免单个文件过大;使用缓冲输出和异步IO,减少磁盘IO次数;选择高性能文件系统,如NVMeSSD存储日志文件。GC优化与内存占用分析Logback内存分配特点Logback在日志事件处理中,可能因频繁创建日志对象(如日志消息字符串、异常堆栈对象等)而产生较多临时对象,增加GC压力。尤其在高并发场景下,同步日志模式下对象创建与销毁更为频繁。Log4j2无垃圾机制优势Log4j2在稳态日志记录期间,通过对象复用(如预分配LogEvent对象)和高效的缓冲区管理,实现了独立应用中无垃圾、Web应用中低垃圾的特性,显著减少GC压力,提升系统响应性能。GC压力对比测试数据在高并发日志场景下,Log4j2的异步日志机制相比Logback的异步Appender,能减少约30%-50%的GC暂停次数和时间,尤其在处理大量DEBUG级别日志时,内存分配效率优势明显。内存占用优化实践配置Log4j2的RingBuffer大小(默认256*1024)需结合应用日志量和内存资源,避免过大导致内存浪费;Logback可通过调整AsyncAppender队列大小和启用参数化日志(避免字符串拼接)减少内存占用。生产环境日志配置最佳实践
分级日志输出策略生产环境建议根日志级别设为INFO,核心业务模块可单独开启DEBUG级别,第三方依赖(如org.hibernate)设为WARN以减少噪声。
日志文件轮转与归档采用SizeAndTimeBasedRollingPolicy,按天轮转并限制单文件10-100MB,总大小控制在100MB-2GB,保留30天历史日志,启用cleanHistoryOnStart清理旧日志。
敏感信息脱敏处理通过PatternLayout的replace过滤器对日志中的密码、手机号等敏感信息进行脱敏,例如使用%replace(%msg){'\\d{11}','***'}替换手机号。
异步日志性能优化Logback配置AsyncAppender包装FileAppender,Log4j2启用基于Disruptor的AsyncLogger,队列大小建议设为256*1024,避免主线程阻塞。
多环境配置隔离使用SpringProfile或logback-spring.xml的05异常处理与高级应用日志系统常见异常分析与解决日志不输出异常检查依赖是否冲突,确保日志框架与SLF4J版本匹配;验证配置文件路径是否正确,Logback默认查找classpath下的logback.xml/logback-test.xml,Log4j2默认查找log4j2.xml日志级别不生效问题确认配置文件中根日志级别与具体Logger级别设置是否正确,注意级别继承关系;检查代码中是否硬编码日志级别,避免覆盖配置文件设置日志文件路径权限异常确保应用对日志文件目录有读写权限,Windows系统注意路径分隔符使用反斜杠或转义符,Linux系统可通过chmod命令调整目录权限异步日志性能瓶颈LogbackAsyncAppender出现阻塞时,可增大队列容量或调整丢弃策略;Log4j2异步日志需确保Disruptor依赖正确引入,高并发场景建议设置合理的RingBuffer大小敏感信息泄露风险通过自定义Layout或Filter对日志中的密码、手机号等敏感信息进行脱敏处理,例如使用Logback的%replace转换符配合正则表达式替换敏感内容敏感信息脱敏与日志安全
敏感信息识别与风险日志中常见敏感信息包括密码、手机号、身份证号等,直接记录可能导致数据泄露,违反数据安全法规。
Logback脱敏实现使用Logback的%replace转换符,通过正则表达式替换敏感内容,例如:%replace(%msg){'(\\d{11})','***'}%n可脱敏手机号。
Log4j2脱敏配置在Log4j2的PatternLayout中配置Replace过滤器,如:<Replaceregex="(\\\"password\\\":\\\")(.*?)(\\\")"replacement="$1****$3"/>实现密码脱敏。
日志安全最佳实践避免在日志中记录敏感信息,采用参数化日志避免字符串拼接,定期审计日志配置,确保脱敏规则有效执行。MDC上下文日志应用实践
01MDC核心价值与应用场景MDC(MappedDiagnosticContext)提供线程级上下文存储,支持在多线程环境下追踪请求链路。典型应用于分布式系统追踪、用户会话绑定、微服务调用链等场景,解决日志碎片化问题。
02LogbackMDC基础操作示例通过MDC.put("requestId","12345")设置上下文,日志格式中使用%X{requestId}输出。代码示例:MDC.put("userId","u789");("用户操作");MDC.remove("userId");
03Log4j2MDC高级特性支持Lambda表达式简化MDC操作:try(CloseableThreadContext.Instancectc=CloseableThreadContext.put("traceId","t567")){logger.debug("处理请求");},自动清除上下文。
04最佳实践与注意事项1.确保线程池场景下MDC值正确传递(使用装饰器模式包装Runnable);2.避免存储敏感信息;3.结合日志聚合工具(如ELK)实现全链路追踪;4.高并发下控制MDC键值对数量以减少GC压力。日志聚合平台选型主流日志聚合方案包括ELKStack(Elasticsearch+Logstash+K
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建农林大学《金融学基础题库》2025-2026学年期末试卷
- 闽南理工学院《中医耳鼻喉》2025-2026学年期末试卷
- 皖北卫生职业学院《保险法》2025-2026学年期末试卷
- 南昌航空大学《外国法制史》2025-2026学年期末试卷
- 安徽绿海商务职业学院《国际结算》2025-2026学年期末试卷
- 华东交通大学《西方经济学题库》2025-2026学年期末试卷
- 福建船政交通职业学院《新媒体概论》2025-2026学年期末试卷
- 福建农林大学金山学院《学前卫生学》2025-2026学年期末试卷
- 贵州特岗政治试题及答案
- 铁合金炉外法冶炼工安全生产知识考核试卷含答案
- 哈尔滨2025年哈尔滨“丁香人才周”(春季)事业单位招聘1347人笔试历年参考题库附带答案详解
- 脑血管病的饮食指导
- 创伤救护-止血、包扎、固定、搬运课件
- 2024年华夏银行股份有限公司校园招聘考试试题完整
- 《陆上风电场工程概算定额》NBT 31010-2019
- DZ∕T 0142-2010 航空磁测技术规范(正式版)
- 二次安全措施票培训
- 残疾学生送教上门备课、教案
- 口腔前台接诊流程和话术培训
- 保洁礼节礼仪培训
- 土建劳动力计划表劳动力安排计划及劳动力计划表
评论
0/150
提交评论