java – 如何使用相同的log4j logger为不同的包创建不同的日志文件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何使用相同的log4j logger为不同的包创建不同的日志文件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2859字,纯文字阅读大概需要5分钟。
内容图文
![java – 如何使用相同的log4j logger为不同的包创建不同的日志文件?](/upload/InfoBanner/zyjiaocheng/710/d14ff55e9ffc4db6b922c0898ba1fdd6.jpg)
我正在尝试为不同的包设置单独的日志文件.我正在使用Wrapper类作为log4j记录器.我的应用程序中的每个类都调用相同的包装类.我的包装类:
public class MyLogger
{
private static Logger logger = Logger.getLogger(MyLogger.class.getName());
....
....
}
它被称为这样:
MyLogger.write(, , );
有没有办法配置log4j,以便它将不同包的日志记录输出到不同的文件?
谢谢!
编辑:
这是我的log4j.properties文件:
log4j.rootLogger=DEBUG, infoout, aar
log4j.logger.com.businessservice.datapopulation=DEBUG, aar
log4j.additivity.com.businessservice.datapopulation=false
log4j.appender.infoout = org.apache.log4j.RollingFileAppender
log4j.appender.infoout.file=/app/aar_frontend.log
log4j.appender.infoout.append=true
log4j.appender.infoout.Threshold=DEBUG
log4j.appender.infoout.MaxFileSize=2MB
log4j.appender.infoout.MaxBackupIndex=10
log4j.appender.infoout.layout = org.apache.log4j.PatternLayout
log4j.appender.infoout.layout.ConversionPattern = %m%n
log4j.appender.aar = org.apache.log4j.RollingFileAppender
log4j.appender.aar.file=/app/aar/aar_backend.log
log4j.appender.aar.append=true
log4j.appender.aar.Threshold=DEBUG
log4j.appender.aar.MaxFileSize=2MB
log4j.appender.aar.MaxBackupIndex=10
log4j.appender.aar.layout = org.apache.log4j.PatternLayout
log4j.appender.aar.layout.ConversionPattern = %m%n
解决方法:
如果在MyLogger类中创建静态Logger,则会有一个Logger实例,其名称设置为MyLogger.当您从其他软件包调用该记录器时,Log4j无法确定这些调用的来源,因为它们都使用相同的Logger.
处理它的最好方法是在每个类中定义一个单独的Logger,但是如果你想使用一个类作为Log4j的联系点,那么你可以这样做:
package com.daniel.logger;
import org.apache.log4j.Logger;
import com.daniel.package1.ClassA;
import com.daniel.package2.ClassB;
public class MyLogger{
public static void write(String message, Class<?> clazz){
Logger.getLogger(clazz).info(message);
}
public static void main(String[] args){
ClassA.log();
ClassB.log();
}
}
然后,使用它的一个类看起来像:
package com.daniel.package1;
import com.daniel.logger.MyLogger;
public class ClassA {
public static void log(){
MyLogger.write("ClassA",ClassA.class);
}
}
log4j.properties文件看起来像:
log4j.appender.package1=org.apache.log4j.FileAppender
log4j.appender.package1.File=package1.log
log4j.appender.package1.layout=org.apache.log4j.PatternLayout
log4j.appender.package2=org.apache.log4j.FileAppender
log4j.appender.package2.File=package2.log
log4j.appender.package2.layout=org.apache.log4j.PatternLayout
log4j.logger.com.daniel.package1=DEBUG,package1
log4j.logger.com.daniel.package2=DEBUG,package2
如果你不想从ClassA传递Class,你可以使用反射的讨厌技巧,获得调用类的名称,但由于性能影响,我不建议这样做:
public class MyLogger
{
public static void write(String message){
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
Logger.getLogger(stackTraceElements[2].getClassName()).info(message);
}
public static void main(String[] args){
ClassA.log();
ClassB.log();
}
}
内容总结
以上是互联网集市为您收集整理的java – 如何使用相同的log4j logger为不同的包创建不同的日志文件?全部内容,希望文章能够帮你解决java – 如何使用相同的log4j logger为不同的包创建不同的日志文件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。