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

linux 将已经启动的java应用的控制台日志输出出来, 不停应用的情况下

在 Linux 系统中,如果你已经启动了一个 Java 应用程序,并且希望在不停止应用的情况下查看其控制台日志输出(即标准输出 stdout 和标准错误 stderr),可以使用以下几种方法:

  1. 使用 journalctl 查看系统日志

如果 Java 应用程序是通过 systemd 服务启动的,你可以使用 journalctl 命令来查看日志。假设你的服务名为 myapp.service

journalctl -u myapp.service -f

-u myapp.service:指定要查看的服务。
-f:跟随日志输出(类似于 tail -f)。

  1. 使用 strace 跟踪文件描述符

如果你知道 Java 应用程序的进程 ID (PID),可以使用 strace 来跟踪其文件描述符,找到日志输出的位置。

  1. 查找 Java 应用程序的 PID:

    ps aux | grep java
    
  2. 使用 strace 跟踪文件描述符:

    strace -p <pid> -e trace=write
    

    这将显示所有写操作,包括标准输出和标准错误。你可以从中找到日志输出的位置。

  3. 使用 lsof 查找打开的文件

你可以使用 lsof 命令来查找 Java 应用程序打开的所有文件,从而找到日志输出的位置。

  1. 查找 Java 应用程序的 PID:

    ps aux | grep java
    
  2. 使用 lsof 查找打开的文件:

    lsof -p <pid> | grep log
    

    这将列出与该 PID 相关的所有打开的日志文件。

  3. 使用 gdb 附加到进程并重定向输出

你可以使用 gdb 附加到正在运行的 Java 进程,并重定向其输出。这种方法比较复杂,但可以实现。

  1. 查找 Java 应用程序的 PID:

    ps aux | grep java
    
  2. 使用 gdb 附加到进程:

    gdb -p <pid>
    
  3. gdb 中重定向输出:
    gdb 提示符下,输入以下命令:

    call (int) dup2(open("/path/to/your/logfile.log", O_WRONLY | O_CREAT | O_APPEND, 0644), 1)
    call (int) dup2(open("/path/to/your/logfile.log", O_WRONLY | O_CREAT | O_APPEND, 0644), 2)
    detach
    quit
    

    这将把标准输出 (stdout) 和标准错误 (stderr) 重定向到 /path/to/your/logfile.log 文件中。

  4. 使用 socatgdbus 重定向输出

你可以使用 socatgdbus 工具来重定向一个正在运行的进程的输出。

使用 socat

  1. 查找 Java 应用程序的 PID:

    ps aux | grep java
    
  2. 使用 socat 重定向输出:

    socat - /proc/<pid>/fd/1 > /path/to/your/logfile.log &
    socat - /proc/<pid>/fd/2 >> /path/to/your/logfile.log &
    

    这将把标准输出和标准错误分别重定向到 /path/to/your/logfile.log 文件中。

  3. 使用 script 命令记录终端会话

如果你是在终端中启动 Java 应用程序的,可以使用 script 命令来记录终端会话。

  1. 启动一个新的终端会话并记录:

    script -c "java -jar myapp.jar" /path/to/your/logfile.log
    

    这将记录整个终端会话到 /path/to/your/logfile.log 文件中。

总结

● 使用 journalctl:适用于通过 systemd 服务启动的应用。
● 使用 strace:跟踪文件描述符,找到日志输出位置。
● 使用 lsof:查找打开的文件,找到日志输出位置。
● 使用 gdb:附加到进程并重定向输出。
● 使用 socat:重定向标准输出和标准错误。
● 使用 script:记录终端会话。

通过这些方法,你应该能够在不停止 Java 应用程序的情况下查看其控制台日志输出。


http://www.kler.cn/news/363932.html

相关文章:

  • TDengine 与北微传感达成合作,解决传统数据库性能瓶颈
  • NVIDIA 发布适用于网络安全的 NIM Blueprint
  • Flask集成sqlalchemy (学习笔记)
  • 数据库的构成与手写简单数据库的探索
  • Chainlit集成LlamaIndex和Chromadb实现RAG增强生成对话AI应用
  • ecmp观察
  • Java 使用 itextpdf 自定义 生成 pdf
  • CSS 网格布局
  • 前端发送请求格式
  • 2024昆明ICPC A. Two-star Contest(直观命名+详细注释)
  • SpringCloudAlibaba-Nacos
  • upload靶场sql靶场一点点见解
  • 【论文阅读】SRGAN
  • UE5 射线折射
  • Ubuntu22.04虚拟机安装
  • 牛客周赛63
  • 【OpenAI】第六节(语音生成与语音识别技术)从 ChatGPT 到 Whisper 的全方位指南
  • MFF原理描述
  • 2024-1024节
  • MySQL-存储引擎入门概念
  • 2024 Rust现代实用教程:1.1Rust简介与安装更新
  • 对于Windows 11蓝屏代码0x0000003B的研究
  • 【c++小游戏】Surviving版本v0.1.1
  • [LeetCode] 78. 子集
  • 标准函数let、run、also、all、with、takeIf、takeUnless
  • [LeetCode] 207. 课程表