记录spring_boot的日志系统学习

Spring_boot的热部署

     引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <version>2.7.14</version>
</dependency>

     Idea设置自动编译

  1. Idea设置自动部署 ctrl+shift+alt+/ 快捷键

  1. 重新编译后启动,当再次更改代码 控制台刷新后,再次通过浏览器发送的http请求,就能得到最新的结果

java中日志系统的发展/作用

  1. 记录日志到本地文件
  2. 按天或者文件大小记录到多个文件
  3. 出现异常立马短信通知用户,不需要运维或者用户自己主动发现
  4. 按日志等级来区分,不同日志列别分到不同的日志文件
  5. io异步,日志输出的格式可以自定义

这就是log4j,它进行开源后,其它开发者进行更新

JDK当时并没有收录log4j,后来被apatch基金会收纳

后来JDK官方出版了官方的日志系统,JUL java.util.logging

后来市面上的日志框架非常混乱,

JDK官方提供了日志门面,JCL,不提供实现日志功能,整合日志(它的原理是通过类加载器,来判定是否存在相关的日志接口的实现,如果存在,则使用,不存在,则继续查找其他的)

Logj作者发现官方提供的jcl并不好用,后来独自开发了日志门面,slf4j(它里面比较重要的是适配器和桥接器),

适配器:将其它的日志转换到slf4j

桥接器:slf4j用拿一个具体的实现,来日志记录

总结:适配器是对外的其它日志工具的适配,桥接器,是slf4j内部找到logbak具体的实现来进行日志记录;

Log4j2:基于log4j提升了性能,进行了升级有了log4j2

Logbak:log4j作者基于初版log4j来进行的性能优化进行了升级

日志实现

日志门面

Log4j

Slf4j

jul

jcl

Log4j2

logbak

注:标红为推荐,原作者开发出来的,springboot也是用的这一套

Spring_boot日志依赖

Spring底层的日志记录是jcl,所以springboot把jcl的实现,添加了适配器,转到slf4j上,然后进行统一管理。

Spring_boot日志记录级别

TRACE<DEBUG<INFO<WARN<ERROR<FATAL或OFF之一,设置级别后,只有高于该级别的才会输出;

Lombok工具记录日志

首先,添加lombok的依赖,然后idea如果不支持lombok还得下载插件,而且lombok是和JDK版本,它的更新速度没有那么快,添加@Slf4j注解后,可以直接使用,但是实际开发中,只要有一个人用了这个,所有的开发人员都需要配置,所以不太建议;

Spring_boot自带记录日志

注意:这里的logger是org.slf4j.logger

Spring_boot默认日志级别,以及控制日志级别的细粒度

Spring_boot默认级别为info,所以spring_boot的其它包下的记录只有info级别,而我们自定义的com.chenlei包下的级别为trace,所以它记录了所有的级别日志;

Spring_boot日志格式

官网说明:Core Features

官网中查到的日志格式:

Common Application Properties

%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}){faint}解析:

%clr {faint}:表示中间的内容颜色,faint表示为无颜色

${value1:value2}:表达式为,如果value1有值,则取value1,没有则取value2,

LOG_DATEFORMAT_PATTERN:表示取当前系统环境变量,它也对应了spring_boot中的配置,意思是可以在配置文件中,没有定义则是默认格式-yyyy-MM-dd'T'HH:mm:ss.SSSXXX

%d{}:是logbak用来定义日期格式的,因为spring_boot的log的实现用的是logbak

Logback中文说明:

Logback 中文文档 - 第四章:Appender | Docs4dev

2024-02-11 21:36:36.279  INFO 31180 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''

Spring_boot日志文件输出

Spring_boot提供两个配置,一般是都用name,来进行自定义文件名

logging.file.path:只能指定路径,文件名是默认的文件名

Logging.file.name:能用路径+文件名的格式自定义文件名

logging:
  level:
    com:
      chenlei: trace
  file:
    path: D:/log/
    name: D:/my.log

Spring_boot日志文件归档,可以定义日志文件的最大size,和最大的文件数量等

轮转日志文件格式

${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

${LOG_FILE}文件名

.%d{yyyy-MM-dd}:日期格式

.%i文件的下标,1,2,3....

.gz历史日志会议压缩包的形式被打包

这个是默认的格式,也可以根据需要自定义格式

Spring_boot日志文件高级功能

以下只例举了两种特别的功能,需要用到spring-logback.xml才能使用,其它可以直接使用logback.xml,更多功能,比如产生报警日志,直接发邮件到用户等可以详细参考logback的中文网中的中文文档

Logback 中文文档 - 第四章:Appender | Docs4dev

注意:只要是使用了下面两种文件的其中一种,spring_boot的application文件中的日志配置就会失效,也就是优先级单独的日志文件会更高;

将不同级别的文件输出到不同的文件中

也可以引用主文件中的配置,还能结合spring_boot中的profile来根据不同环境进行生效

,不过这个就需要用另一个spring-logback.xml才行

Application.yml

Logback-spring.xml

Spring_boot日志框架切换

Spring_boot提供了log4j和logback场景启动器,都是高效的日志记录框架

当同时有log4j和logback日志框架的依赖,需要手动排除一个桥接器,添加一个桥接器会自动引入日志的实现,exclude,log4j2和logback的日志文件不完全通用,使用不同的slf4j的实现,需要重新配置

### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值