System中的out,error都是final类型的,不能做改动。但通过setOut()可以设置新的输出流,从而实现写日志的功能。
import java.io.PrintStream; import java.io.FileNotFoundException; public class RedirectOutputStream { public static void main(String arg[]){ try{ PrintStream out = System.out; //保留原输出流 PrintStream ps = new PrintStream("./log.txt");//创建文件输出流 System.setOut(ps); //设置使用新的输出流 int age = 18; System.out.println("年龄变量成功定义,初始值为:18"); String sex = "女"; System.out.println("性别变量成功定义,初始值为:女"); String info = "这个是"+ sex +"孩子,应该有"+age+"岁"; System.out.println("整合两个变量为info字符串变量,其结果为"+info); System.setOut(out); //恢复原有输出流 System.out.println("程序运行完毕,请查看日志文件。"); } catch(FileNotFoundException e){ e.printStackTrace();} } }
日志如下:
年龄变量成功定义,初始值为:18
性别变量成功定义,初始值为:女
整合两个变量为info字符串变量,其结果为这个是女孩子,应该有18岁
总结:
该方法中保存了System类的out成员变量为临时变量,然后创建新的文件输出流,并把这个输出流设置为System类的新是输出流。并将持续的调试信息输出到日志中去。主要方法:
1. setOut()方法: 重新分配System类的标准输出流。
2. setErr()方法: 重新分配System类的标准错误输出流。
3. setIn()方法: 重新分配System类的标准输入流。
问题内容: 我对jdk日志记录配置有疑问。我有一个使用JDK Logging输出消息的EJB(已部署到glassfish中)。因此,我使用具有以下代码的命名记录器: 我知道可以通过将以下行添加到Glassfish的logging.properties文件中来为记录器配置日志级别: 但是,如何为记录器指定输出文件?我想将来自名为“ org.imixs.workflow”的记录器的所有消息放入单独的文
从其他问题中,我发现WebSphere和Spark都在内部使用SLF4J。如何防止Spark中的SLF4J通过自身重定向来自其他应用程序的所有日志记录? 我使用的是WebSphere Application Server V8.5.5.6和Apache Spark V1.4.1 CHD4二进制发行版。
问题内容: 我们在办公室内部有一个可以通过Java Web访问的应用程序。 该应用程序生成的所有日志都显示在Firefox的控制台中。 我想要做的是将其重定向到文件。 那可能吗 ? 以及如何做到这一点? PS:该应用程序的设计如下:客户端应用程序,用于访问服务器上的EJB。 客户端部分是通过java webstart提供的部分。 问题答案: 我认为使用System.setOut方法可以将所有Sys
问题 你希望将单元测试的输出写到到某个文件中去,而不是打印到标准输出。 解决方案 运行单元测试一个常见技术就是在测试文件底部加入下面这段代码片段: import unittest class MyTest(unittest.TestCase): pass if __name__ == '__main__': unittest.main() 这样的话测试文件就是可执行的,并且会将
这可能吗?我知道我可以以类似的方式将stdout定向到文件(请参见:将打印重定向到日志文件)