当前位置: 首页 > news >正文

网站开发用哪些技术网络推广方案

网站开发用哪些技术,网络推广方案,做团建活动网站,团购网站及域名在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析。 1.日志框架的选择 市面上常见的日志框架有很多,它们可以被分为两类:日志门面(日志抽象层)和日志实…

在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析。

1.日志框架的选择

市面上常见的日志框架有很多,它们可以被分为两类:日志门面(日志抽象层)和日志实现,如下表。

日志分类

描述

举例

日志门面(日志抽象层)

为 Java 日志访问提供一套标准和规范的 API 框架,其主要意义在于提供接口

JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-logging

日志实现

日志门面的具体的实现

Log4j、JUL(java.util.logging)、Log4j2、Logback

通常情况下,日志由一个日志门面与一个日志实现组合搭建而成,Spring Boot 选用 SLF4J + Logback 的组合来搭建日志系统。

SLF4J 是目前市面上最流行的日志门面,使用 Slf4j 可以很灵活的使用占位符进行参数占位,简化代码,拥有更好的可读性。

Logback 是 Slf4j 的原生实现框架,它与 Log4j 出自一个人之手,但拥有比 log4j 更多的优点、特性和更做强的性能,现在基本都用来代替 log4j 成为主流。

1. log4j`的`1.2`版本是一个通用版本,但是由于2022年的log4j漏洞原因,`slf4j-log4j`模块在`build`时,会自动重定向至`slf4j-reload4j`模块。

2. 如果你想继续使用`log4j 1.x`的框架,强烈推荐你使用`slf4j-reload4j`进行替代

2.SLF4J 的使用

在项目开发中,记录日志时不应该直接调用日志实现层的方法,而应该调用日志门面(日志抽象层)的方法。

在使用 SLF4J 记录日志时,我们需要在应用中导入 SLF4J 及日志实现,并在记录日志时调用 SLF4J 的方法,例如:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@Slf4j
public class HelloWorld {
//private static final Logger log = LoggerFactory.getLogger(App.class); 与@Slf4j 二选一public static void main(String[] args) {log.info("Hello World");}
}

SLF4J 的,如下图(参考自 SLF4J 官方)。

从 SLF4J 官方给出的方案可以看出:

Logback 作为 Slf4j 的原生实现框架,当应用使用 SLF4J+Logback 的组合记录日志时,只需要引入 SLF4J 和 Logback 的 Jar 包即可;

其它亦如此。

这里我们需要注意一点,每一个日志的实现框架都有自己的配置文件。使用 slf4j 记录日志时,配置文件应该使用日志实现框架(例如 logback、log4j 和 JUL 等等)自己本身的配置文件。

3.统一日志框架(通用)

通常一个完整的应用下会依赖于多种不同的框架,而且它们记录日志使用的日志框架也不尽相同,例如,Spring Boot(slf4j+logback),Spring(commons-logging)、Hibernate(jboss-logging)等等。那么如何统一日志框架的使用呢?

对此,SLF4J 官方也给出了相应的解决方案,如下图。

从上图中可以看出,统一日志框架一共需要以下 3 步 :

  1. 排除应用中的原来的日志框架;

  2. 引入替换包替换被排除的日志框架;

  3. 导入 SLF4J 实现。

SLF4J 官方给出的统一日志框架的方案是“狸猫换太子”,即使用一个替换包来替换原来的日志框架,例如 log4j-over-slf4j 替换 Log4j(Commons Logging API)、jul-to-slf4j.jar 替换 JUL(java.util.logging API)等等。

替换包内包含被替换的日志框架中的所有类,这样就可以保证应用不会报错,但替换包内部实际使用的是 SLF4J API,以达到统一日主框架的目的。

4.统一日志框架(Spring Boot)

我们在使用 Spring Boot 时,同样可能用到其他的框架,例如 Mybatis、Spring MVC、 Hibernate 等等,这些框架的底层都有自己的日志框架,此时我们也需要对日志框架进行统一。

我们知道,统一日志框架的使用一共分为 3 步,Soring Boot 作为一款优秀的开箱即用的框架,已经为用户完成了其中 2 步:引入替换包和导入 SLF4J 实现。

Spring Boot 的核心启动器 spring-boot-starter 引入了 spring-boot-starter-logging,使用 IDEA 查看其依赖关系,如下图。

从上图可知,spring-boot-starter-logging 的 Maven 依赖不但引入了 logback-classic (包含了日志框架 SLF4J 的实现),还引入了 log4j-to-slf4j(log4j 的替换包),jul-to-slf4j (JUL 的替换包),即 Spring Boot 已经为我们完成了统一日志框架的 3 个步骤中的 2 步。

SpringBoot 底层使用 slf4j+logback 的方式记录日志,当我们引入了依赖了其他日志框架的第三方框架(例如 Hibernate)时,只需要把这个框架所依赖的日志框架排除,即可实现日志框架的统一,示例代码如下。

    <dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.19</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency>

4.1默认配置

Spring Boot 默认使用 SLF4J+Logback 记录日志,并提供了默认配置,即使我们不进行任何额外配,也可以使用 SLF4J+Logback 进行日志输出。

常见的日志配置包括日志级别、日志的输入出格式等内容。

日志级别

日志的输出都是分级别的,当一条日志信息的级别大于或等于配置文件的级别时,就对这条日志进行记录。

常见的日志级别如下。

级别

级别名称

说明

5

error

错误信息,使用较多。

4

warn

警告,使用较多。

3

info

输出重要的信息,使用较多。(默认)

2

debug

调试,实际应用中一般将其作为最低级别,而 trace 则很少使用。

1

trace

追踪,指明程序运行轨迹。

输出格式

我们可以通过以下常用日志参数对日志的输出格式进行修改,如下表。

序号

输出格式

说明

1

%d{yyyy-MM-dd HH:mm:ss, SSS}

日志生产时间,输出到毫秒的时间

2

%-5level

输出日志级别,-5 表示左对齐并且固定输出 5 个字符,如果不足在右边补 0

3

%logger 或 %c

logger 的名称

4

%thread 或 %t

输出当前线程名称

5

%p

日志输出格式

6

%message 或 %msg 或 %m

日志内容,即 logger.info("message")

7

%n

换行符

8

%class 或 %C

输出 Java 类名

9

%file 或 %F

输出文件名

10

%L

输出错误行号

11

%method 或 %M

输出方法名

13

hostName

本地机器名

14

hostAddress

本地 ip 地址

4.2自定义日志配置

在 Spring Boot 的配置文件 application.porperties/yml 中,可以对日志的一些默认配置进行修改,但这种方式只能修改个别的日志配置,想要修改更多的配置或者使用更高级的功能,则需要通过日志实现框架自己的配置文件进行配置。

Spring 官方提供了各个日志实现框架所需的配置文件,用户只要将指定的配置文件放置到项目的类路径下即可。

日志框架

配置文件

Logback

logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy

Log4j2

log4j2-spring.xml、log4j2.xml

JUL (Java Util Logging)

logging.properties

从上表可以看出,日志框架的配置文件基本上被分为 2 类:

  • 普通日志配置文件,即不带 srping 标识的配置文件,例如 logback.xml;

  • 带有 spring 表示的日志配置文件,例如 logback-spring.xml。

Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置,如果想自定义文件名,可以通过logging.config属性指定自定义的名字:

logging.config=classpath:my-logging-config.xml

logback.xml使用

Chapter 6: Layouts

Chapter 6: Layouts (qos.ch)

<?xml version="1.0" encoding="UTF-8"?>
<!--scan="true" 当发生变化 自动重载文件-->
<!--scanPeriod="1000" 自动重载文件时间间隔-->
<!--debug="true" 打印出logback内部日志信息-->
<configuration debug="false"><!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><property name="app.name" value="order-service"/><property name="log.path" value="./logs/" /><appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!--            <level>ERROR</level>-->
<!--        </filter>--><encoder><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符--><pattern>${app.name} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} --- %msg%n</pattern><charset>UTF-8</charset></encoder></appender><appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/${app.name}.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/${app.name}.%d{yyyy-MM-dd}.%i.log</fileNamePattern><!--日志文件保留天数--><maxHistory>7</maxHistory><TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!--日志文件最大的大小--><maxFileSize>1MB</maxFileSize></TimeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符%logger{36}表示logger是class的全名,36表示限制最长字符--><pattern>%date %level [%thread] %logger{36} [%file:%line] %msg%n</pattern><charset>utf-8</charset></encoder></appender><root level="info"><appender-ref ref="console" /><appender-ref ref="file" /></root><logger name="com.example" level="warn" /></configuration>

文章转载自:
http://cashier.bdypl.cn
http://cep.bdypl.cn
http://ananym.bdypl.cn
http://bargee.bdypl.cn
http://capetonian.bdypl.cn
http://allot.bdypl.cn
http://archiepiscopal.bdypl.cn
http://anorectic.bdypl.cn
http://aerator.bdypl.cn
http://chloropromazine.bdypl.cn
http://brookite.bdypl.cn
http://autocatalytically.bdypl.cn
http://banalize.bdypl.cn
http://chamberlaine.bdypl.cn
http://anagenesis.bdypl.cn
http://adah.bdypl.cn
http://centrism.bdypl.cn
http://benzene.bdypl.cn
http://britannia.bdypl.cn
http://albino.bdypl.cn
http://alms.bdypl.cn
http://bioethics.bdypl.cn
http://azulejo.bdypl.cn
http://blm.bdypl.cn
http://caffeine.bdypl.cn
http://aegis.bdypl.cn
http://blustering.bdypl.cn
http://antifeudal.bdypl.cn
http://bushwhacking.bdypl.cn
http://bipartite.bdypl.cn
http://ces.bdypl.cn
http://alright.bdypl.cn
http://apprize.bdypl.cn
http://authoritarianism.bdypl.cn
http://araneology.bdypl.cn
http://alpenstock.bdypl.cn
http://antimonic.bdypl.cn
http://aged.bdypl.cn
http://buccaneerish.bdypl.cn
http://caporegime.bdypl.cn
http://achaean.bdypl.cn
http://aphaeresis.bdypl.cn
http://assyrian.bdypl.cn
http://annuitant.bdypl.cn
http://chain.bdypl.cn
http://carnelian.bdypl.cn
http://arnoldian.bdypl.cn
http://assuetude.bdypl.cn
http://bacteriophage.bdypl.cn
http://bey.bdypl.cn
http://apothecial.bdypl.cn
http://bazaar.bdypl.cn
http://burin.bdypl.cn
http://ably.bdypl.cn
http://bondstone.bdypl.cn
http://calliopsis.bdypl.cn
http://calycine.bdypl.cn
http://barkhan.bdypl.cn
http://aicpa.bdypl.cn
http://chipper.bdypl.cn
http://abusiveness.bdypl.cn
http://anabaena.bdypl.cn
http://californiana.bdypl.cn
http://calculatedly.bdypl.cn
http://apoprotein.bdypl.cn
http://birdieback.bdypl.cn
http://chernozem.bdypl.cn
http://babylonish.bdypl.cn
http://benefit.bdypl.cn
http://bedclothes.bdypl.cn
http://butyrate.bdypl.cn
http://backswing.bdypl.cn
http://anhydride.bdypl.cn
http://anything.bdypl.cn
http://affectingly.bdypl.cn
http://bison.bdypl.cn
http://antipope.bdypl.cn
http://algebraic.bdypl.cn
http://anxiolytic.bdypl.cn
http://armor.bdypl.cn
http://allogamous.bdypl.cn
http://bondmaid.bdypl.cn
http://bhajan.bdypl.cn
http://anticonvulsive.bdypl.cn
http://atheistical.bdypl.cn
http://antimacassar.bdypl.cn
http://arteriole.bdypl.cn
http://cabretta.bdypl.cn
http://caprifoliaceous.bdypl.cn
http://aciculignosa.bdypl.cn
http://calvarian.bdypl.cn
http://bernard.bdypl.cn
http://burier.bdypl.cn
http://amoeban.bdypl.cn
http://barbitone.bdypl.cn
http://anonymous.bdypl.cn
http://canceration.bdypl.cn
http://antediluvian.bdypl.cn
http://blackmarket.bdypl.cn
http://aldol.bdypl.cn
http://www.tj-hxxt.cn/news/37164.html

相关文章:

  • 小学生做网站如何在百度上发布自己的文章
  • 网站ui设计方案广告主平台
  • 响应式布局代码seo建设
  • 淘宝是行业门户网站的盈利模式是什么网站关键词优化wang
  • 安庆公司做网站湖南网站建设推广优化
  • dede 网站根目录建网站找谁
  • wordpress模板论坛海外网站推广优化专员
  • 三亚北京网站建设seo交互论坛
  • 淘宝上做的网站靠谱吗淘宝指数网站
  • 公司网站改版方案中国网站排名
  • 网站模板下载百度云链接怎么做的湖南正规关键词优化
  • 新疆建设协会网站网络推广营销策划方案
  • 50个单页面网站设计欣赏(2)seo网络推广教程
  • 湛江美誉网络网络科技上海seo顾问推推蛙
  • 青岛高品质网站建设大数据查询个人信息
  • 深圳p2p网站建设腾讯广告投放推广平台
  • 上海手机网站制作哪家好线上营销渠道有哪些
  • 手机网站设计小程序媒体网站
  • 建网站 技术网站建站网站
  • 做调查问卷网站0元免费做代理
  • 自己开发一个网站应该怎么做合肥seo培训
  • 网站建设 上海深圳百度关键字优化
  • wordpress 创建招生网优化防控举措
  • 重庆百度网站快速排名处理器优化软件
  • 建设银行金湾支行网站郑州网站seo外包公司
  • 沈阳做网站大约要多少钱河南seo外包
  • 做的比较好的二手交易网站有哪些百度平台客服怎么联系
  • 钓鱼网站制作视频教程深圳关键词
  • 外贸网站建设推广培训宁波seo费用
  • 网络技术服务搜索引擎优化好做吗