IDEA 如何让程序运行期间 不在 RUN 窗口的输出,而是输出到log 文件

news/2024/10/10 2:26:12

在 IntelliJ IDEA 中,可以将程序的输出重定向到一个日志文件,而不是直接输出到 Run 窗口。这个可以通过配置 log4j 或者 java.util.logging 等日志框架来实现,也可以使用标准的输出重定向方法将 System.outSystem.err 输出到文件中。

下面是几种实现方式:

1. 使用 log4jslf4j 等日志框架

log4jslf4j 等日志框架是标准的日志输出工具,支持将日志输出到文件中。假设你已经在项目中使用了 log4j,可以通过配置日志文件输出。

log4j 配置示例(log4j2.xml)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><!-- 控制台输出 --><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /></Console><!-- 文件输出 --><File name="File" fileName="logs/app.log"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /></File></Appenders><Loggers><!-- 根日志记录器 --><Root level="info"><AppenderRef ref="Console"/><AppenderRef ref="File"/></Root></Loggers>
</Configuration>

在这个配置文件中:

  • Console appender 负责输出到 IDEA 的控制台。
  • File appender 负责输出到指定的文件(比如 logs/app.log)。

你可以根据需求删除 Console appender 使得所有日志都只输出到文件。

使用 log4j 的代码示例

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class MyApplication {private static final Logger logger = LogManager.getLogger(MyApplication.class);public static void main(String[] args) {logger.info("This is an info message.");logger.error("This is an error message.");}
}

2. 使用标准输出重定向

如果你不想引入日志框架,也可以通过标准的 System.outSystem.err 重定向实现输出到文件。

示例代码:

import java.io.FileOutputStream;
import java.io.PrintStream;public class MyApplication {public static void main(String[] args) {try {// 创建输出流FileOutputStream fileOut = new FileOutputStream("logs/app_output.log");PrintStream printStream = new PrintStream(fileOut);// 将标准输出重定向到文件System.setOut(printStream);// 将标准错误输出重定向到文件System.setErr(printStream);// 测试输出System.out.println("This message will be written to the log file.");System.err.println("This is an error message.");} catch (Exception e) {e.printStackTrace();}}
}

在这个示例中:

  • System.setOut() 用来将标准输出(System.out)重定向到文件。
  • System.setErr() 用来将标准错误输出(System.err)重定向到文件。

这样,所有原本会输出到 Run 窗口的内容,现在会被写入到 logs/app_output.log 文件中。

3. 使用 java.util.logging

Java 内置的日志框架 java.util.logging 也支持将日志输出到文件中。配置较为简单,以下是如何通过 java.util.logging 将输出重定向到文件的示例。

示例代码:

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;public class MyApplication {private static final Logger logger = Logger.getLogger(MyApplication.class.getName());public static void main(String[] args) {try {// 创建文件处理器,日志文件将输出到 logs/app_log.logFileHandler fileHandler = new FileHandler("logs/app_log.log", true);fileHandler.setFormatter(new SimpleFormatter());// 将文件处理器添加到日志记录器中logger.addHandler(fileHandler);// 测试输出logger.info("This is an info message.");logger.severe("This is a severe error message.");} catch (IOException e) {e.printStackTrace();}}
}

在这个示例中,日志信息会被写入到 logs/app_log.log 文件中,而不是输出到 Run 窗口。

4. IntelliJ IDEA 自带日志功能

IntelliJ IDEA 允许你在 Run/Debug Configurations 中配置输出日志文件:

  1. 打开 Run/Debug Configurations
  2. 选择你的应用程序的运行配置。
  3. 在右侧选择 Logs 选项卡。
  4. 点击 + 号,选择 Log File,设置日志文件路径和其他参数。
  5. 你可以配置 IDEA 自动将运行时输出写入指定的日志文件。

这种方式主要适用于你已经有其他方式来输出日志(如 log4j 等),并希望 IDEA 将输出写入到日志文件。

总结

  • 如果使用日志框架(如 log4jslf4j),可以通过配置日志文件输出。
  • 如果不使用日志框架,也可以通过标准输出和错误输出重定向到文件。
  • Java 内置的 java.util.logging 也提供了将日志写入文件的功能。
  • IntelliJ IDEA 允许在 Run/Debug Configurations 中直接配置日志文件的输出路径。

通过这些方式,你可以将 Java 程序运行时的日志重定向到文件,而不在 IDEA 的 Run 窗口中显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/69648.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

两台iStoreOS路由器通过wireguard实现异地组网

一、前言 我在家中和单位宿舍申请了两条联通千兆宽带,每条均有公网ip,如何实现更多玩法呢?最近折腾了一下异地组网,这里简单记录一下 环境:路由器A,内网ip为192.168.1.1,系统为iStoreOS, 路由器B,内网ip为192.168.0.1,系统和版本号同上 至少有一条具有公网ip的宽带,…

1panel搭建frp服务端并使用openresty反向代理实现https访问

前言 这次国庆节回老家发现家里的路由器居然是我去年带过去的斐讯K2p,已经刷了openwrt,于是想着有没有更多玩法?因为家里的宽带是移动宽带,没有公网IP,所以来折腾一下frp内网穿透。 我想实现的目标是:通过不同的三级域名,来访问不同的服务。例如,访问https://op.frp.xx…

004、v3admin学习,使用ci4搭建后端服务器

1、按照php环境和composer,输入cmd的composer命令,版本是2.7.9 2、在工作目录,输入命令行composer create-project codeigniter4/appstarter ci4 ,会全自动创建工程 3、把composer下来的文件,拷贝到外面工程中。 4、用phpstorm打开工程,更新一下依赖包 5、用小皮桌面开启p…

UNRAID下安装Virtual DSM

本文基于【完结】Virtual DSM 逆向笔记 (基于libvirt的安装及升级) (jxcn.org) 感谢chk-jxcn的分享! 一、安装镜像的准备 链接:https://pan.baidu.com/s/16I89NHPTW6TDx7ACh67yiA 提取码:7hkq 下载下来的镜像是原作者chk-jxcn(jxcn.org)从 DSM 中提取出的 VDSM 7.0 的安装镜…

house_of_muney [2023CISCN]

house_of_muney 首先介绍一下house of muney 这个利用原理: 在了解过_dl_runtime_resolve的前提下,当程序保护开了延迟绑定的时候,程序第一次调用相关函数的时候会执行下面的命令 push n push ModuleID jmp _dl_runtime_resolve 这里的n对应的是这个符号在rel.plt重定位表中…

C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式

分享删除字符串最后一个字符的多种实现方法,包括字符串、StringBuilder、Array、Linq等方式,并进行性能测试。结果显示字符串方式性能最优,但了解多种方法有助于选择最合适的方法。今天想通过和大家分享如何删除字符串最后一个字符的N种实现方法,来回顾一些基础知识点。 01…

NET Core 基础 - 删除字符串最后一个字符的七大类N种实现方式

分享删除字符串最后一个字符的多种实现方法,包括字符串、StringBuilder、Array、Linq等方式,并进行性能测试。结果显示字符串方式性能最优,但了解多种方法有助于选择最合适的方法。今天想通过和大家分享如何删除字符串最后一个字符的N种实现方法,来回顾一些基础知识点。 01…

003、v3admin学习,修改全局配置如去掉水印等

1、v3admin打开之后的界面如下 2、修改一下全局通用设置 3、界面如下 4、把app.vue中的这一段注释掉 5、浏览器也就没有弹窗显示了。