【问题标题】:java logging properties : Log a certain class to a specific log filejava logging properties : 将某个类记录到特定的日志文件
【发布时间】:2012-05-31 09:26:52
【问题描述】:

我使用 java.util.logging 的属性文件并希望记录包下的所有类:

aaa.bbb.ccc.*

正常的方式(即信息,精细,更好)但类

aaa.bbb.ccc.ddd.MyClass

在其自己的日志文件“My Class.log”中,级别更精细。

配置只能通过属性文件完成。这会是什么样子?

我尝试了各种方法(例如不同的处理程序),但都没有成功:将两个日志文件都写入其中从未奏效。

为了让问题更具体——我尝试的配置:

handler.performance.class=com.logging.handler.FileHandler
handler.performance.file=${LOGGING_ROOT}/performance.log
handler.performance.level=FINE

handler.fine.class=com.logging.handler.FileHandler
handler.fine.file=${LOGGING_ROOT}/finer.log
handler.fine.level=FINE

handler.async.class=com.logging.handler.AsyncBufferHandler
handler.async.level=ALL
handler.async.targets=fine

handler.asyncperf.class=com.logging.handler.AsyncBufferHandler
handler.asyncperf.level=ALL
handler.asyncperf.targets=performance

com.myapp.handlers=async,console
com.myapp.useParentHandlers=false

com.myapp.common.logging.handlers=asyncperf
com.myapp.common.logging.useParentHandlers=false

我要记录到这个单独的性能日志的类位于 com.myapp.common.logging...

【问题讨论】:

  • 指定,你使用什么日志系统。
  • 只是好奇:LOGGING_ROOT 是在哪里定义的?

标签: java logging properties java.util.logging


【解决方案1】:

找到解决方案 - 初始化错误:

记录器应该初始化为:

Logger.getLogger(MyClass.class.getName())

然后是配置:

com.myapp.common.logging.MyClass.handlers=asyncperf
com.myapp.common.logging.MyClass.useParentHandlers=false

根据需要将此类的所有日志消息记录在指定的单独文件中!

【讨论】:

    【解决方案2】:

    为两个目标文件定义两个 File appender

    定义一个根记录器以使用第一个附加程序

    为特殊类定义第二个记录器,以使用另一个附加程序

    将记录器的可加性设置为 false 以使任何消息都转到一个文件而不是两个文件

    【讨论】:

    • 我不使用 log4j(很遗憾)。只是普通的 java.util.logging。
    • 抱歉,假设为 log4j。不知道为什么。
    【解决方案3】:

    我认为您有问题,因为您无法配置 2 个默认 FileHandler,只能配置其中一个。因此,尝试实现您个人的 FileHandler 子类并将其配置为单独的处理程序。 我不记得我们是否可以为单独的类或只为包配置记录器,所以尝试也将处理程序配置为 MyClass 的包。

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      相关资源
      最近更新 更多