我试图为不同的包设置单独的日志文件。我使用一个包装类的log4j
记录器。我的应用程序中的每个类都调用相同的包装器类。我的包装类:
public class MyLogger
{
private static Logger logger = Logger.getLogger(MyLogger.class.getName());
....
....
}
这就是所谓的:
MyLogger.write(, , );
有没有办法配置log4j,以便将不同包的日志记录输出到不同的文件?
谢谢!
编辑:
这是我的log4j。属性
文件:
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
创建2个appender和2个logger可以满足您的需要。
你可以这样做(com.myco.a和com.myco.b是两个不同的包):
log4j.logger.com.myco.a=DEBUG, infoout
log4j.logger.com.myco.b=DEBUG, aar
干杯
如果在MyLogger类中创建静态记录器,则有一个记录器实例,名称设置为MyLogger。当您从其他包调用该记录器时,Log4j无法确定这些调用的来源,因为它们都使用相同的记录器。
处理它的最佳方法是在每个类中定义一个单独的记录器,但是如果您想使用一个类作为与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。属性
文件看起来像:
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传递类,您可以使用一个带有反射的讨厌的技巧,即获取调用类的名称,但由于性能受到影响,我不建议这样做:
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();
}
}
问题内容: 我正在尝试为不同的软件包设置单独的日志文件。我正在使用Wrapper类作为记录器。我的应用程序中的每个类都调用相同的包装器类。我的包装器类: 它的名称如下: 有没有一种方法可以配置log4j,以便将不同包的日志记录输出到不同文件? 谢谢! 编辑: 这是我的文件: 问题答案: 如果在MyLogger类中创建静态Logger,则您将有一个Logger实例,其名称设置为MyLogger。当您
问题内容: 我正在使用log4j登录我的应用程序。我正在尝试在不同文件中使用不同级别的日志,但是出了点问题。对于解决此问题的任何帮助,我们将不胜感激。 问题答案: log4j附加程序的标准行为是,它们以其阈值级别 或更高 的阈值记录所有消息,即具有阈值INFO的附加器将记录INFO,WARN,ERROR和FATAL消息,但不记录DEBUG。如果你想记录 只有 INFO信息,但不会发出警告及以上,然
问题内容: 我有一个普通的INFO级别应用日志。我需要的是另外记录所有错误级别的事件,以单独的错误日志。我正在使用这样的配置: 此配置仅记录错误。如果我首先放置信息级别记录器,则它将仅记录到一般附加程序,但错误记录器将无法工作。我想让他们两个都工作。 问题答案: 您需要做的是只有一个定义了INFO级别的定义,但是在您的两个追加器定义中,您需要相应地设置其阈值,例如 然后,将两个追加程序添加到记录器
我正在尝试创建基于不同级别的“不同”附加器,但到目前为止,我找不到一种隔离日志级别的方法。。。。 我需要一种方法,能够土地只有INFO优先排序的日志被追加。因为INFO级别的日志记录也会显示DEBUG标记的日志记录器...这对我没有帮助。 另一件事是,对于“相同”包,我无法定义不同的日志附加器: 在这里,我得到了如下错误:
对于一些人来说,这可能是一个非常简单的问题,但就我个人而言,Log4j配置非常困难,学习执行脑部手术可能没有那么困难。 我正试图让多个日志记录者登录到不同的文件。这是我的log4j中的内容。属性文件: 这是我的(非常简单的)Java应用程序用于测试配置: 我有两个问题: 有一个问题,我总是在