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

想自己建一个公司网站怎么做有域名了 怎么做网站

想自己建一个公司网站怎么做,有域名了 怎么做网站,wordpress 读书模板,网站搭建费用价格表文章目录 一、前言二、案例一#xff1a;初识日志三、案例二#xff1a;使用Lombok输出日志四、案例三#xff1a;配置Logback 一、前言 在开发 Java 应用时#xff0c;日志记录是不可或缺的一部分。日志可以记录应用的运行状态、错误信息和调试信息#xff0c;帮助开发者… 文章目录 一、前言二、案例一初识日志三、案例二使用Lombok输出日志四、案例三配置Logback 一、前言 在开发 Java 应用时日志记录是不可或缺的一部分。日志可以记录应用的运行状态、错误信息和调试信息帮助开发者快速定位和解决问题。Spring Boot 项目默认集成了 SLF4J 和 Logback使得日志配置变得简单而灵活。本文将详细介绍如何在 Spring Boot 项目中配置 SLF4J 和 Logback包括基本的日志配置、日志文件的输出路径、日志级别、日志格式和环境区分配置。 日志的重要性 快速定位问题通过分析日志开发者可以迅速定位应用程序中的错误或性能问题。确保合规性许多行业要求应用程序符合特定标准日志记录了应用程序的运行状态便于审计和合规性检查。提高开发效率日志记录了应用程序的历史行为有助于快速复现问题并优化代码。 日志框架介绍 门面模式Facade Pattern又称为外观模式 门面模式Facade Pattern又称为外观模式, 提供了一个统⼀的接口, ⽤来访问⼦系统中的⼀群接口. 其主要特征是定义了⼀个高层接口, 让子系统更容易使用。 门面模式主要包含2种角色: 外观角色(Facade): 也称门面角色系统对外的统⼀接口.子系统角色(SubSystem): 可以同时有⼀个或多个 SubSystem. 每个 SubSytem 都不是⼀个单独的类,而是⼀个类的集合. SubSystem 并不知道 Facade 的存在, 对于 SubSystem 而言, Facade 只是另⼀个客户端而已(即 Facade 对 SubSystem 透明 比如去医院看病可能要去挂号, 门诊, 化验, 取药, 让患者或患者家属觉得很复杂, 如果有提供接待人员, 只让接待⼈员来处理, 就很方便。 日志级别分类 1.Trace 最低级别的日志,追踪, 指明程序运行轨迹比DEBUG更细粒度的信息事件(除非有特殊用意否则请使用DEBUG级别替代) 2.Debug 详细调试信息,常用于调试过程中使用的调试信息 3.Info 一般信息或状态更新,常用于提供程序运行的基本信息 4.Warning 警告性信息,常用于提醒可能的问题或性能优化建议 5.ERROR 错误信息, 级别较高的错误日志信息, 但仍然不影响系统的继续运行。 6.FATAL 致命信息表示需要立即被处理的系统级错误。 二、案例一初识日志 引入依赖 Spring Boot 项目默认已经包含了 SLF4J 和 Logback 的依赖如果你使用的是 Spring Initializr 初始化的项目通常不需要额外添加依赖。如果你的项目中没有这些依赖可以在pom.xml中添加如下依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-logging/artifactId /dependency基本日志配置 Spring Boot 允许通过application.yml或application.properties文件进行简单的日志配置。以下是一个基本的配置示例 application.yml logging:level:root: INFOcom.example.yourpackage: DEBUG # 你的项目包路径file:name: application.logpattern:console: %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%nfile: %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%napplication.properties logging.level.rootINFO logging.level.com.example.yourpackageDEBUG # 你的项目包路径 logging.file.nameapplication.log logging.pattern.console%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n logging.pattern.file%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n以上配置将日志级别设置为INFO并为你的项目包设置为DEBUG级别。同时设置了日志文件的名称和日志输出的格式。 日志的打印 创建控制层类 LoggerController.java 注意创建的日志对象Logger和LoggerFactory类都是来自于Slf4j包底下的类。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/logger) public class LoggerController {// 要想打印日志的前提是要有一个日志对象日志对象来自于LoggerFactory类中 // 创建日志对象private Logger logger LoggerFactory.getLogger(LoggerController.class);//打印不同级别的日志RequestMapping(/log)public String log(){logger.info(日志内容);logger.trace(日志内容);logger.debug(日志内容);logger.error(日志内容);logger.warn(日志内容);return 打印日志;} } 代码运行结果 因本项目端口为9000 故访问路径http://localhost:9000/logger/log 日志持久化 以上的日志都是输出在控制台上的, 然而在线上环境中, 我们需要把日志保存下来, 以便出现问题之后追溯问题. 把日志保存下来就叫持久化。 日志持久化有两种方式: 配置日志文件名配置日志的存储目录 配置日志文件名 yml配置 logging:file:# 在源目录下创建日志文件name: log/log.log配置日志的保存路径 yml文件配置 logging:file:# 日志在指定路径下面path: d/loggeController三、案例二使用Lombok输出日志 上面创建日志对象的方式还是比较麻烦的如果程序中的类比较多的话每个类都需要创建一个日志对象就很繁琐此时我们可以借助lombok中的**Slf4j**注解来更简单的输出日志。 RestController RequestMapping(/logger) Slf4j public class LoggerController {// Slf4j 等同于// private Logger log LoggerFactory.getLogger(LoggerController.class);RequestMapping(/log)public String log(){// 添加Slf4j注解后类会自动生成一个log对象log.info(日志内容);log.trace(日志内容);log.debug(日志内容);log.error(日志内容);log.warn(日志内容);return 打印日志;} }四、案例三配置Logback Logback 是 SLF4J 的一个实现提供了更强大的日志配置功能。你可以通过logback-spring.xml文件进行更详细的日志配置。以下是一个示例配置文件 1、logback-spring.xml configuration!-- 定义日志文件的路径和名称 --property nameLOG_PATH value/var/log/yourapp /property nameLOG_FILE value${LOG_PATH}/application.log /!-- 控制台日志输出配置 --appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoderpattern%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n/pattern/encoder/appender!-- 文件日志输出配置 --appender nameFILE classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE}/filerollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 日志文件的滚动策略 --fileNamePattern${LOG_PATH}/application-%d{yyyy-MM-dd}.log/fileNamePatternmaxHistory30/maxHistory !-- 保留30天的日志文件 --/rollingPolicyencoderpattern%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n/pattern/encoder/appender!-- 指定日志级别 --logger nameorg.apache.ibatis levelDEBUGappender-ref refFILE /appender-ref refSTDOUT //loggerlogger namecom.example.yourpackage levelDEBUGappender-ref refFILE /appender-ref refSTDOUT //logger!-- 根日志级别 --root levelINFOappender-ref refFILE /appender-ref refSTDOUT //root /configuration2、环境区分配置 在实际项目中不同环境如开发环境、测试环境、生产环境的日志配置需求可能会有所不同。Spring Boot 支持多配置文件来区分不同环境。你可以在src/main/resources目录下创建多个配置文件例如 application-dev.yml开发环境配置application-test.yml测试环境配置application-prod.yml生产环境配置 application-dev.yml spring:config:activate:on-profile: devlogging:level:root: DEBUGcom.example.yourpackage: DEBUGfile:name: application-dev.logpattern:console: %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%nfile: %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%napplication-test.yml spring:config:activate:on-profile: testlogging:level:root: INFOcom.example.yourpackage: INFOfile:name: application-test.logpattern:console: %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%nfile: %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%napplication-prod.yml spring:config:activate:on-profile: prodlogging:level:root: WARNcom.example.yourpackage: INFOfile:path: /var/log/yourappname: application-prod.logpattern:console: %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%nfile: %d{yyyy-MM-dd HH:mm:ss} %thread %-5level %logger{36} - %msg%n启动应用时可以通过命令行参数指定使用哪个配置文件 java -jar -Dspring.profiles.activeprod yourapp.jar3、日志文件路径权限 确保 Spring Boot 应用在服务器上有写日志文件的权限。你可以通过以下命令检查和修改目录权限 # 检查目录权限 ls -ld /var/log/yourapp# 修改目录权限 sudo chown -R youruser:yourgroup /var/log/yourapp sudo chmod -R 755 /var/log/yourapp4、日志文件查看 启动应用后检查日志文件是否正确生成并记录了日志。你可以在服务器上使用以下命令查看日志文件 # 查看日志文件 tail -f /var/log/yourapp/application-prod.log5、使用自定义拦截器 如果你需要在日志中记录特定的信息例如 SQL 执行时间可以使用自定义拦截器。以下是一个示例拦截器 SqlTimingInterceptor.java package com.example.yourpackage.interceptor;import org.apache.ibatis.executor.Executor; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.logging.Log; import org.apache.ibatis.logging.slf4j.Slf4jImpl; import org.apache.ibatis.plugin.*;import java.sql.Statement; import java.util.Properties;Intercepts(Signature(type StatementHandler.class, method query, args {Statement.class, ResultHandler.class})) public class SqlTimingInterceptor implements Interceptor {Overridepublic Object intercept(Invocation invocation) throws Throwable {long start System.currentTimeMillis();try {return invocation.proceed();} finally {long end System.currentTimeMillis();long timeTaken end - start;StatementHandler statementHandler (StatementHandler) invocation.getTarget();String sql (String) SystemMetaObject.forObject(statementHandler).getValue(delegate.boundSql.sql);Log log Slf4jImpl.create(this.getClass());log.debug(SQL: sql);log.debug(执行时间: timeTaken ms);}}Overridepublic Object plugin(Object target) {return Plugin.wrap(target, this);}Overridepublic void setProperties(Properties properties) {// 可以设置一些自定义属性} }MyBatisConfig.java package com.example.yourpackage.config;import com.example.yourpackage.interceptor.SqlTimingInterceptor; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DriverManagerDataSource;import javax.sql.DataSource; import java.util.Properties;Configuration MapperScan(com.example.yourpackage.mapper) public class MyBatisConfig {Beanpublic DataSource dataSource() {DriverManagerDataSource dataSource new DriverManagerDataSource();dataSource.setDriverClassName(org.postgresql.Driver);dataSource.setUrl(jdbc:postgresql://localhost:5432/yourdb);dataSource.setUsername(yourusername);dataSource.setPassword(yourpassword);return dataSource;}Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {SqlSessionFactoryBean factoryBean new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(classpath:mapper/*.xml));// 注册拦截器SqlTimingInterceptor sqlTimingInterceptor new SqlTimingInterceptor();Properties properties new Properties();properties.setProperty(someProperty, someValue); // 根据需要设置拦截器属性sqlTimingInterceptor.setProperties(properties);factoryBean.setPlugins(new Interceptor[]{sqlTimingInterceptor});return factoryBean.getObject();} }
http://www.zqtcl.cn/news/503319/

相关文章:

  • 学网页设计在哪学关键词优化公司前十排名
  • 菏泽定制网站建设推广无固定ip 建设网站
  • wordpress网站制作教程视频百度云域名购买
  • 软件最全网站株洲网站排名优化价格
  • 购物便宜的网站有哪些家居企业网站建设讯息
  • 美橙网站产品详情深圳做网站的公司哪个好
  • 江苏省建设注册中心网站平面设计要素
  • 厦门网站建设_策划公司
  • 惠州建网站服务网站建设价格是哪些方面决定的
  • 如何在百度上做公司做网站搜索百度网页版
  • 松江新城投资建设发展有限公司网站产品营销文案
  • 哪个网站有做彩平的材质贴图广州app开发公司排行十强
  • 泉州网站设计蜜桃传奇免费网页版
  • 做建筑机械网站那个网站好茂名网站开发服务商
  • 网站建设制作方法网站设计昆明
  • 设计一个自己的电商网站中国建设银行官网首页登录
  • 肇庆自助网站建设系统南通网站建设项目
  • 道农网站建设工作网站开发制作
  • 网页游戏网站快手wordpress hppts
  • 男男做h的视频网站德邦公司网站建设特点
  • 嘉兴市建设教育网站html5从入门到精通
  • 双语言网站源码在哪个网站可以找到做国珍的人
  • 广州建设网站哪家好烟台网站建设地址
  • 网址注册了怎么做网站wordpress截取标题
  • 网站备案一个主体龙岩网站建设行情
  • 深圳做网站的公司烟台网站开发技术
  • 网站开发就业前景分析手机网站导航设计
  • 山西焦煤集团公司网站推广公司一般都怎么推广
  • 前端视频教程网站燕郊网站建设哪家好
  • 加强校园网站建设方案做核酸检测收费标准