我在我的应用程序中使用log4j来记录具有不同日志级别的某些包.

但是,stderr和stdout似乎没有在此日志文件中捕获,而是在应用程序启动时将它们打印在文件中

java AppName >> out.log

是否有可能在log4j中捕获stdout和stderr(例如stdout as info和stderr as WARN / ERROR)以及out.log文件?

log4j的设置如下:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="FileAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="${MDCapture.logfile.dir}/${APP_NAME}.log"/>
        <param name="Bufferedio" value="false"/>
        <param name="DatePattern" value="'.'yyyy-MMM-dd"/>
        <layout class="org.apache.log4j.TTcclayout">
            <param name="DateFormat" value="ISO8601"/>
        </layout>
    </appender>

    <appender name="AsyncAppenders" class="org.apache.log4j.AsyncAppender">
        <appender-ref ref="FileAppender"/>
    </appender>

<!-- LOGGER PACKAGES -->

<root>
    <priority value="info"/>
    <appender-ref ref="AsyncAppenders"/>
</root>
</log4j:configuration>

更新:

Stackoverflow错误的Stacktrace:

WARN root buffer size limit:65log4j:WARN root buffer size limit:65Exception in thread "Thread-12"
2013-03-22 09:14:24,451 [Thread-12] ERROR root - java.lang.StackOverflowError
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at java.io.BufferedWriter.write(BufferedWriter.java:202)
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at java.io.Writer.write(Writer.java:140)
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at java.io.PrintStream.write(PrintStream.java:475)
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at java.io.PrintStream.print(PrintStream.java:619)
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at java.io.PrintStream.println(PrintStream.java:756)
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at org.apache.log4j.helpers.LogLog.warn(LogLog.java:171)
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at org.apache.log4j.AsyncAppender.append(AsyncAppender.java:175)
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)


2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at org.apache.log4j.Category.callAppenders(Category.java:206)
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at org.apache.log4j.Category.forcedLog(Category.java:391)
2013-03-22 09:14:24,452 [Thread-12] ERROR root -        at org.apache.log4j.Category.log(Category.java:838)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at com.company.something.AClass.LoggingOutputStream.flush(LoggingOutputStream.java:198)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at java.io.PrintStream.write(PrintStream.java:432)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:85)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:168)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at java.io.PrintStream.write(PrintStream.java:477)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at java.io.PrintStream.print(PrintStream.java:619)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at java.io.PrintStream.println(PrintStream.java:756)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at org.apache.log4j.helpers.LogLog.warn(LogLog.java:171)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at org.apache.log4j.AsyncAppender.append(AsyncAppender.java:175)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
2013-03-22 09:14:24,453 [Thread-12] ERROR root -        at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:

解决方法

要将stdout和stderr重定向到log4j,请尝试以下方法:
System.setErr( new PrintStream( new LoggingOutputStream( Logger.getRootLogger(  ),Level.ERROR ),true);

System.setout( new PrintStream( new LoggingOutputStream( Logger.getRootLogger(  ),Level.INFO ),true);

对于LoggingOutputStream,您可以从this example开始

要让log4j将您想要的内容打印到控制台(如果需要,将其捕获回文件/节点),启用ConsoleAppender到适当的级别

java – 在unix重定向之前在log4j中捕获stderr和stdout的更多相关文章

  1. iOS:如何以编程方式在应用程序中从私钥和x509certificate创建PKCS12(P12)密钥库?

    这个问题显然很相似,但没有任何答案:Programmaticallycreateax509certificateforiPhonewithoutusingOpenSSL在我们的应用程序(服务器,客户端)中,我们正在实现客户端身份验证(基于X509Certificate的SSL).我们已经有办法生成密钥对,创建PKCS10证书签名请求,由自签名CA签名并创建X509Certificate,然后发回.

  2. Java中 SLF4J和Logback和Log4j和Logging的区别与联系

    这篇文章主要介绍了Java中 SLF4J和Logback和Log4j和Logging的区别与联系,文章通过围绕主题展开详细的内容介绍,具有一定的参考几种,感兴趣的小伙伴可以参考一下

  3. log4j 文件输出

    至于你要随时修改日志输出目的地的话,只要修改配置文件中的log4j.appender.A2.File就行了===================================sort.properties内容如下:#1定义了两个输出端log4j.rootLogger=debug,A1,A2#2定义A1输出到控制器log4j.appender.A1=org.apache.log4j.ConsoleAppender#3定义A1的布局模式为PatternLayoutlog4j.appender.A1.layo

  4. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  5. 如何在Windows中旋转tomcat日志?什么是最好的方法?

    我真的厌倦了在我们的Windows服务器中放入无数小时后和尝试各种解决方案后无法解决tomcat日志轮换问题.>环境:Java1.6x,Tomcat6(作为服务运行),log4j1.2,Server200332位迄今为止尝试的方法:>cronolog没有工作,没有设置后创建的文件.>管理为Tomcat全局配置DailyRollingFileappender的log4j,正在创建没有扩展名的日志文件

  6. stdout – 使用Windows Script Host捕获WshShell.Exec的输出

    我尝试使用“WshShell.Run()”,但这给我一个“权限被拒绝”的错误,这是有问题的,因为我不想告诉我的客户端改变他们的Windows环境如何配置只是为了运行我的程序.我能做什么?

  7. Windows – 将批处理文件重定向到文件

    我有一个执行java应用程序的批处理文件.我试图修改它,以便每当发生异常时,它会将STDERR写入一个文件.看起来像这样:有没有办法我可以将参数%1和%2写入log.txt文件?

  8. 在stderr的Windows上更改文本输出颜色

    我最近发现了一个帖子给出了一个解决方案,让stderr的文本输出为Linux的不同颜色他们创建了以下bash脚本脚本这会导致输出在来自stderr时打印黄色文本.stdout仍然打印相同的颜色.该脚本保存在名为color的$PATH目录中.这允许我使用make或scons运行脚本,并且它将以黄色显示来自stderr的所有文本.这对于在编译时发现错误非常有用.是否有类似的脚本可用于Windowscmdshell?

  9. ubuntu – 如何重定向已经运行的进程的stdout / stderr?

    (在Ubuntu10.0464位服务器上运行)昨天,我犯了一个错误,就是在不使用屏幕的情况下通过SSH启动一个进程(我没有意识到要花几天时间才能运行).我今天花了一整天的时间试图找出一些方法,我可以从SSH的铁把手中撬开这个过程的输出,这样我就可以重新启动我的客户端机器,但是我没有到达任何地方.我尝试使用gdb并遵循thispage底部的说明,但是当我运行第一个gdb命令来创建文件时,我收到一条错

  10. stdout – PHP CLI不使用stderr输出错误

    我在MacOS中通过NSTask运行PHPCLI,但这个问题更多的是关于CLI本身.我正在听stderr管道,但没有任何输出,无论我尝试运行什么文件:>如果文件类型不是纯文本,则stdout设置为?>如果文件是具有错误的PHP脚本,则错误消息仍将打印到stdout.解释器是否有切换到通过stderr处理错误?除了解析stdout之外,我还有一个检测错误的选项吗?

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部