在我的应用程序中,目前我使用log4j来记录日志。所有的日志都被写入同一个日志文件。有一个公共的日志文件,其中一些其他的应用程序也使用写日志。
让我们假设我有aap.log
和common.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.log
或addadditivity="false
创建一个新的附加器。我想使用一个CustomUtility类将日志写入common.log
,而不是从log4.xml配置它。
我怎么能把日志写在同一个common.log
文件中,这样其他应用程序的数据或我的数据就不会被弄乱。
1条答案
按热度按时间p1tboqfb1#
因此,简而言之,您需要执行以下操作:
1.定义另一个文件附加器(基本上是复制您在问题中提出的部分,更改名称模式)。我认为您不应该使用
app.log
和app1.log
,以避免与日志循环策略相关的混淆。因此,只需为这个新日志文件选择其他名称,并将附加器与它关联。1.当你有一个附加器时--把实用类的记录器和这个附加器关联起来。你没有在问题中显示它,但是很有可能一个特殊的“根”记录器和这个附加器关联起来。所以你应该为实用类定义一个记录器(使用类的完全限定名,包括包),并且把你在“1”中创建的附加器和它关联起来。
在此步骤之后,来自此实用程序类的日志将被写入2个文件。为什么?因为日志库的可加性特性:
1.所以你应该用“additivity=false”来定义在“2”中创建的日志。基本上,additivity意味着你不仅应该从记录器本身解析实际的追加器,还应该从它的父记录器解析实际的追加器,设置
additivity=false
会破坏这个链