java logging properties:将某个类记录到特定的日志文件中

时间:2012-05-31 09:26:53

标签: java logging properties java.util.logging

我使用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 ...

下面

3 个答案:

答案 0 :(得分:4)

找到解决方案 - 这是一个错误的初始化:

应使用以下命令初始化记录器:

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

然后是配置:

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

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

答案 1 :(得分:1)

为两个目标文件定义两个文件追加器

定义一个根记录器以使用第一个appender

为特殊类定义第二个记录器,以使用另一个appender

将记录器的可加性设置为false,以便将任何消息发送到一个但不是两个文件

答案 2 :(得分:0)

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