如何为Java应用程序设计日志结构

如何为Java应用程序设计日志结构,java,multithreading,Java,Multithreading,我是java新手,我知道java有Log4J、logback等用于日志记录。我的问题更多的是一个应用程序中应该有多少个日志文件。应该是每个线程、每个线程组、进程、异常等。在我们的应用程序中,有可能有大量线程,我正在考虑每个线程都有日志文件的缺点。是否存在登录具有大量线程的应用程序的最佳实践 提前谢谢 1消息日志-调用SystemOut.log 1个用于堆栈跟踪的日志-称之为SystemErr.log 1个跟踪日志-称之为Trace.log 本机stdout的1个日志-称为nativeStdOut

我是java新手,我知道java有Log4J、logback等用于日志记录。我的问题更多的是一个应用程序中应该有多少个日志文件。应该是每个线程、每个线程组、进程、异常等。在我们的应用程序中,有可能有大量线程,我正在考虑每个线程都有日志文件的缺点。是否存在登录具有大量线程的应用程序的最佳实践


提前谢谢

1消息日志-调用SystemOut.log

1个用于堆栈跟踪的日志-称之为SystemErr.log

1个跟踪日志-称之为Trace.log

本机stdout的1个日志-称为nativeStdOut.log

本机stderr的1个日志-称为nativeStdErr.log

有一个配置面板,用于设置:

 maxSize
 maxCount

当日志达到最大大小时,开始将其滚动到maxCount,并在滚动的文件名中附加时间戳

我认为最好的解决方案是命名线程,并将日志与发生日志的线程的名称一起写入日志。正因为如此,您将能够为每个线程分别分析两个分析日志,或者一起分析所有日志

通常每个应用程序(进程)都有一个日志文件——很少用于
线程
,也绝不会是
异常
。有时,此日志文件被分为不同的日志级别:一个bucket中的调试消息、另一个bucket中的信息、第三个bucket中的警告/错误。这样,只需查看警告和更重要的文件,就可以轻松地监视错误

log4j有一个配置文件,您可以在其中使用不同的标准将某些消息路由到某些文件。以下是log4j属性文件的示例:

# default is WARN and above going to the appender "logfile" and STDOUT
log4j.rootLogger=WARN, logfile, stdout
# write to ui.log for a day and then move to .yyyy-MM-dd suffix
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=ui.log
log4j.appender.logfile.Append=true
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
# but we log information message from classes in the package com.mprew.be
log4j.logger.com.mprew.be=INFO
log4j和自定义记录器每次都用
名称、优先级、日期/时间等装饰。。例如:

# date     time        priority  Class-name  Log message
2012-03-26 00:55:39,545 [INFO] CmsClientTask Content is up-to-date
通常,异常被写为多行,因此您可以获得整个堆栈跟踪

2012-03-26 01:55:35,777 [INFO] ExceptionInterceptor Reporting problem to customer
    org.springframework.NoSuchRequestException: No request handling method
     at com.ui.base.BaseController.invokeNamedHandler(BaseController.java:240)
     at com.ui.base.BaseController.handleRequestInternal(BaseController.java:100)
     at com.ui.base.CoreServices.handleRequest(CoreServicesController.java:147)
     ...
在我们的分布式系统中,我们将所有日志从所有系统路由到两台服务器,这两台服务器编写调试、信息和警告日志。除了日期/时间、类名、优先级和消息之外,日志消息还具有主机名和特定的日志标记,因此我们可以轻松识别问题的类别。以下是一行:

2012-03-26 00:00:00.045 UTC INFO FE8 TrayController TRAY_CLIENT_LOOKUP
    message=created unknown client with partner STW9
然后,我们可以轻松地grep特定问题


希望这能有所帮助。

你为什么要首先登录??