当我们直接使用 Tomcat 时,访问日志的配置在 $TOMCAT_HOME/conf/server.xml 中<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
产生的日志文件在 $TOMCAT_HOME/logs 目录中,生成以日期戳进行区分的滚动日志文件,如 localhost_access_log.2022-10-25.txt 等
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
而在我们使用 Spring Boot Web 时, 默认的嵌入式 Web 应用服务器是 Tomcat,我们可以在 Spring 属性文件中配置是否启用 Tomcat 访问日志(默认不启用)。属性文件中的配置针对的是如何输出访问日志到文件,而我们有时候需要输出访问日志到控制台而不非文件,比如 AWS 上的 ECS 应用,控制台的输出可直接发送到 CloudWatch,这样便于分析日志。
在 Spring Web 中可以用 Interceptor 或 Filter 来记录访问日志,但在请求出错时无法准确显示出响应时间和状态码,毕竟 Tomcat 的访问日志在代码的外层,进出 Controller 方法的输入输出信息也就掌握的更清楚。
本文的任务是探索输出 Spring Boot Web 嵌入式 Tomcat 的访问日志到控制台。有两种方式 Read More
因为平常主要是使用 EC2 的 Linux 实例,所以之前写过的一篇关于 UserData 的日志 创建 AWS EC2 实例时 userdata 的一些知识 默认就是讲的有关 Linux 实例的 UserData。本文补充上 Windows 的 EC2 实例 UserData 的基本使用,参考自 AWS 官方文档 Run commands on your Windows instance at launch。
Windows 的 UserData 被谁执行,依据所选择 AMI 的不同有以下三种方式- EC2Launch v2: 最新方式,只是被当前预览版的 AMI 所支持,它支持 YAML 配置的脚本
- EC2Launch: 当前方式,Windows Server 2016 及更新版
- EC2Cofnig: 旧有方式, Windows Sever 2012 R2 及旧版本
我们在初始一个 AWS EC2 实例时,可以通过 user data 让 EC2 第一次启动后做些事情,可以放置 shell script 或 cloud-init 指令。在控制台设置 user data 可用明文文本,由 awscli 创建时可使用一个文件,或者通过 API 用 base64 编码的内容。
下面是 user data 被执行时需知晓的一些知识- 是脚本时必须以
#!开始,俗称 Shebang, 如#!/bin/bash - user data是以
root身份执行,所以不要用sudo, 当然创建的目录或文件的 owner 也是root,需要ec2-user用户访问的话需要chmod修改文件权限,或者直接用chown ec2-user:ec2-user -R abc修改文件的所有者() - 脚本不能交互,有交互时必须想办法跳过用户输入,如
apt install -y xzy, 带个-y标记 - 如果脚本中需访问 AWS 资源,权限由 Instance Profile 所指定的 IAM role 决定
- user data 中的脚本会被存储在
/var/lib/cloud/instances/<instance-id>/user-data.txt文件中,因此也可以从这里验证 user data 是否设置正确。或者在 EC2 实例上访问 http://169.254.169.254/latest/user-data 也能看到 user data 的内容。并且在 EC2 实例初始化后不被删除,所以以此实例为基础来创建一个新的 AMI 需把它删除了 - user data 的大小限制为 16 KB, 指 base64 编码前的大小
- cloud-init 的输出日志在
/var/log/cloud-init-output.log, 它会捕获 cloud-init 控制台的输出内容
Read More- 是脚本时必须以