log4j日志使用自定义日期格式时,定义月份为MMM本应显示英文简写但实际显示却是中文

定义的格式为:
<PatternLayout pattern="[%d{MMM d HH:mm:ss}][%c{1}][%p] %m%n" />
这是输出的内容:
[四月 14 15:10:50][HelloWorld][INFO] test
把电脑系统语言改为英文也不行。必须重启之后才会改为英文Apr。

改为${date:MMM d HH:mm:ss}立马会跟着系统语言来定,系统语言为中文就是四月 ,系统为英文就是Apr。

暂时不知道%d和${date}的区别,以后再补。

解决方法:

部署时将centos环境切换为英文。具体步骤:

1、使用locale查看当前使用的编码和字符集

locale

2、使用locale -a查看当前支持的编码和字符集

 locale -a | grep en_US #locale -a会输出当前系统支持的所有编码和字符集,所以我这里使用grep只过滤en_US的字符集

 

 可以看到有en_US.utf8。一定要注意在第下一步修改中不要直接使用这里的en_US.utf8而要写成en_US.UTF-8形式,不然修改不生效系统会继续使用原先的中文编码。

3、执行export LANG=en_US.UTF-8即可。

 export LANG=en_US.UTF-8

 这是动态修改方式,影响只能作用于当前会话--而且只是终端的提示信息由中文变为了英文,界面和目录依然是中文--脱离当前会话或重启系统又变回原来的中文了。可以达到只会影响当前输出日志为英文,而不影响系统系统用户的目的。

 

如果想要永久切换中英文,请见:CentOS中/英文环境切换教程(CentOS6.8)

一、前言

对于不习惯英文的人可能想将系统由英文转成中文;而对于考虑客户端如果没正确配置,中文目录可能显示为乱码的人则可能宁愿将系统由中文转成英文。

中文切换为英文,实际就是将LANG的值由zh_CN-UTF8字符集改为en_US-UTF8字符集;类似的,英文切换为中文,就是将LANG的值由en_US-UTF8改为zh_CN-UTF8。

本文只以中文切换为英文为例。

 

二、中文环境换为英文环境

当前桌面显示如下:

 

用户家目录显示如下:

 

2.1使用locale查看当前使用的编码和字符集

locale

 

2.2 使用locale -a查看当前支持的编码和字符集

locale -a | grep en_US  #locale -a会输出当前系统支持的所有编码和字符集,所以我这里使用grep只过滤en_US的字符集

可以看到有en_US.utf8。一定要注意在第下一步修改中不要直接使用这里的en_US.utf8而要写成en_US.UTF-8形式,不然修改不生效系统会继续使用原先的中文编码。

 

2.3在/etc/profile中修改LANG变量

echo 'export LANG=en_US.UTF-8' >> /etc/profile  #在/etc/profile最后追加
reboot       #重启操作系统

 

2.4 确认将文件夹由中文修改为英文

用图形界面登录主机,出现更名确认界面,点击确认即可

 

 三、说明

3.1 有教程说直接执行export LANG=en_US.UTF-8即可,这样是否确实可行?

答:不可行。至少就我测试来看是不可行的。而且从原理上看这是明显的动态修改方式,影响只能作用于当前会话--而且只是终端的提示信息由中文变为了英文,界面和目录依然是中文--脱离当前会话或重启系统又变回原来的中文了。

 

3.2 有教程说可以修改/etc/sysconfig/i18n,这样是否可行?

答:按在CentOS-6.8和Redhat-6.5测试来看,修改/etc/sysconfig/i18n中是终端中的提示由中文变为了英文,界面和目录并不能变为英文。(不过似乎英文转中文时修改/etc/sysconfig/i18n目录就可以变)

       测试来看/etc/profile优先级高于/etc/sysconfig/i18n。

 

3.3 目录真的是由中文变为英文吗,比如真的是“桌面”变为“Desktop”,然后原先在“桌面”的文件转到“Desktop”吗?

答:按实际操作来看,“桌面”和“Desktop”是两个文件夹。

       设置为中文环境时,图形界面显示“桌面‘文件夹;设置英文环境时,图形界面显示”Desktop“文件夹。原来在”桌面“的文件不会自动保存到”Desktop“,但会保存在”桌面“文件夹中。

 

### 日志间戳解析与处理 在 Linux 系统中,日志文件的间戳格式通常遵循特定的模式,例如 `Nov 24 13:17:01`。这种间戳表示的是日志事件发生的具体间点。为了正确解析处理这种格式的间戳,可以使用多种方法工具。 #### 1. 使用 `strptime` 函数解析间戳 在 Python 中,可以使用 `datetime` 模块中的 `strptime` 函数将字符串格式的间转换为 `datetime` 对象[^4]。以下是一个示例代码: ```python from datetime import datetime # 定义间戳字符串 timestamp_str = "Nov 24 13:17:01" # 使用 strptime 解析间戳 timestamp_obj = datetime.strptime(timestamp_str, "%b %d %H:%M:%S") # 输出解析后的间对象 print("解析后的间对象:", timestamp_obj) ``` 上述代码中,`%b` 表示月份缩写(如 Nov),`%d` 表示日期(两位数字),`%H:%M:%S` 表示小、分钟秒[^4]。 #### 2. 使用 Shell 脚本提取处理间戳 如果需要在 Shell 脚本中处理日志间戳,可以结合 `awk` `date` 命令完成。例如: ```bash #!/bin/bash # 示例日志行 log_line="Nov 24 13:17:01 myserver systemd[1]: Started Session 1 of user root." # 提取间戳部分 timestamp=$(echo $log_line | awk '{print $1, $2, $3}') # 将间戳转换为 Unix 间戳 unix_timestamp=$(date -d "$timestamp" +"%s") # 输出结果 echo "原始间戳: $timestamp" echo "Unix 间戳: $unix_timestamp" ``` 上述脚本通过 `awk` 提取日志行中的间戳,并使用 `date` 命令将其转换为 Unix 间戳[^5]。 #### 3. 自定义日志生成脚本中的间戳处理 参考引用 [^3] 提供的日志生成脚本,如果需要在生成日志自定义间戳格式,可以在 Java 程序中调整间格式化逻辑。例如,修改 `SimpleDateFormat` 的格式字符串以支持同的间戳输出。 ```java import java.text.SimpleDateFormat; import java.util.Date; public class LogTimestampExample { public static void main(String[] args) { // 定义间格式 SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd HH:mm:ss"); // 获取当前间 Date now = new Date(); // 格式化间 String formattedDate = dateFormat.format(now); // 输出间戳 System.out.println("生成的间戳: " + formattedDate); } } ``` 此代码片段展示了如何在 Java 程序中生成符合 `MMM dd HH:mm:ss` 格式的间戳[^6]。 #### 4. 日志间戳的常见用途 日志间戳主要用于以下几个方面: - **事件排序**:通过间戳对日志事件进行排序,以便分析事件发生的顺序[^7]。 - **性能监控**:计算特定操作的耗,例如从日志中提取开始结束间戳并计算差值。 - **故障排查**:快速定位问题发生的间范围,从而缩小排查范围。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值