ssh远程连接客户端Xshell莫名其妙输出一大堆“xshell”的原因

本文介绍了在使用Xshell远程连接Linux主机时遇到的乱码问题。问题出现在将非ASCII码数据以%s形式输出时,导致Xshell客户端显示错误字符。解决办法是输出接收数据的长度而非数据本身。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    用Xshell远程连接到一台linux主机上运行自己编写的代码,经常会莫名其妙地输出一堆“xshell”,甚至程序都没有运行了,命令行依然会输出这些东西。排查了一会,发现这些“xshell”总是跟在一个printf语句后边,而这个语句是把从套接字接受的数据直接以%s的形式输出,看来问题就出现这。我把这句改为输出接收数据的长度而非接收数据本身后问题得到解决。
    原来出这个现象时因为格式化输出输出了一些非正常的字符值。因为套接字接收的数据并非全是标准的ascii码字符串,里边还会有我们定义的结构体数据,而这些数据被格式化输出强制转换成字符后就会变成一堆乱码,当然也有可能是诸如换行、蜂鸣符等“显示不出来”的字符值。这些输出的非正常字符值通过ssh传输给xshell客户端显示,而xshell对待这些无法显示的字符值的方式就是输出一个“xshell”。
### 如何在 Xshell 中配置和打印日志 要在 Xshell 中实现 Tomcat 的详细日志打印,可以通过调整 `logging.properties` 文件中的设置来完成。以下是具体的说明: #### 配置文件详解 Tomcat 使用 Java 自带的日志框架进行日志记录,默认情况下会读取位于 `$CATALINA_BASE/conf/logging.properties` 的配置文件。通过修改该文件的内容,可以控制日志的级别以及输出位置。 - **定义处理器 (Handlers)** 在文件开头通常会有如下一行用于指定使用的日志处理器: ```properties handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler ``` 这里指定了两个处理器:一个是写入文件 (`org.apache.juli.FileHandler`),另一个是输出到控制台 (`java.util.logging.ConsoleHandler`)。 - **FileHandler 属性** FileHandler 负责将日志写入磁盘文件,其主要属性包括: - 日志等级:`org.apache.juli.FileHandler.level = FINE` 表示允许最低级别的调试信息被记录[^1]。 - 存储目录:`org.apache.juli.FileHandler.directory = ${catalina.base}/logs` 定义了日志存储路径为 Tomcat 的 logs 文件夹下。 - 文件前缀名:`org.apache.juli.FileHandler.prefix = error-debug.` 设置生成的日志文件名称以 `error-debug.` 开头。 - **ConsoleHandler 属性** ConsoleHandler 将日志消息发送至标准输出流(通常是终端窗口),它的关键参数有: - 输出等级:`java.util.logging.ConsoleHandler.level = FINE` 同样设为了细粒度模式以便显示更多细节信息。 - 格式化器:`java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter` 利用简单格式化工具呈现日志条目。 #### 实际操作指南 当需要查看特定时间段内的日志时,在 Linux 或类 Unix 系统下的命令行界面中可利用正则表达式配合 grep 工具快速筛选符合条件的数据项。例如下面这条指令能够匹配发生在某一天上午十一点钟附近的时间戳对应的日志片段[^2]: ```bash grep "2023-12-07 11:[50][30]:[58]0" decoration.log ``` 其中各部分含义解释如下: - `"2023-12-07"` —— 明确指出目标日期; - `11:` —— 锁定小时数不变的情况; - `[45][30]` —— 分别代表分钟位上的可能值集合{4,5}与{3,0}组合而成的可能性; - `:[58]` —— 秒定位符及其候选集{5,8}; - `0` —— 结束标志限定秒的小数部分只接受零结尾的情形。 以上方法适用于已知确切时间范围的前提下高效检索相关内容的目的。 ### 示例代码展示 如果希望进一步定制日志行为,则可以在启动脚本或者环境变量中加入额外选项覆盖默认设定。比如增加 JVM 参数 `-Djava.util.logging.config.file=/path/to/custom_logging.properties` 来加载自定义配置文件。 ```bash export JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.config.file=$CATALINA_HOME/conf/custom_logging.properties" ./bin/startup.sh ``` 此段脚本先扩展现有的 JAVA_OPTS 变量内容再调用 startup.sh 执行程序初始化过程从而应用新的日志策略。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值