log4j 将日志写入特定文件,用于特定类的特殊日志

f5emj3cl  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(215)

在我的应用程序中,目前我使用log4j来记录日志。所有的日志都被写入同一个日志文件。有一个公共的日志文件,其中一些其他的应用程序也使用写日志。
让我们假设我有aap.logcommon.log。我希望所有的日志将得到app.log文件,但对于一些特定的类日志将得到common.log
对于app.log,我的log4j配置如下

<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${home}/logs/app.log</File>       
        <encoder>
            <pattern>%d{MM.dd HH:mm:ss.SSS} [%2.2t][%c{1}.%M] %-5p - %m%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <maxIndex>20</maxIndex>
            <FileNamePattern>${home}/logs/app.log.%i</FileNamePattern>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>25MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

我不想在这里为那个类的common.logaddadditivity="false创建一个新的附加器。我想使用一个CustomUtility类将日志写入common.log,而不是从log4.xml配置它。
我怎么能把日志写在同一个common.log文件中,这样其他应用程序的数据或我的数据就不会被弄乱。

p1tboqfb

p1tboqfb1#

因此,简而言之,您需要执行以下操作:
1.定义另一个文件附加器(基本上是复制您在问题中提出的部分,更改名称模式)。我认为您不应该使用app.logapp1.log,以避免与日志循环策略相关的混淆。因此,只需为这个新日志文件选择其他名称,并将附加器与它关联。
1.当你有一个附加器时--把实用类的记录器和这个附加器关联起来。你没有在问题中显示它,但是很有可能一个特殊的“根”记录器和这个附加器关联起来。所以你应该为实用类定义一个记录器(使用类的完全限定名,包括包),并且把你在“1”中创建的附加器和它关联起来。
在此步骤之后,来自此实用程序类的日志将被写入2个文件。为什么?因为日志库的可加性特性:
1.所以你应该用“additivity=false”来定义在“2”中创建的日志。基本上,additivity意味着你不仅应该从记录器本身解析实际的追加器,还应该从它的父记录器解析实际的追加器,设置additivity=false会破坏这个链

相关问题