简介
我一直在寻找这个问题,但到目前为止还没有运气。我正在构建一个使用嵌入式Tomcat作为servlet的Java webapp。我已将log4j设置为主记录器,并将日志发布到指定成功的文件中。因为嵌入了Tomcat,我找不到这个catalina.out文件,我通过SO和其他论坛找到了很多答案。
问题
我想要的是使用log4j将Tomcat日志记录到我用于记录整个webapp的同一文件中。我怎样才能做到这一点?有没有办法以编程方式执行此操作?
P.S。: 我使用Windows作为操作系统,Tomcat版本是8.0.30
答案 0 :(得分:0)
默认情况下,tomcat使用[CATALINA_HOME]/conf/logging.properties
。在那里编辑以下属性:
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = **YOUR_PATH_HERE**
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
答案 1 :(得分:0)
事实证明这比我想象的要简单,所以我只是在这里为那些可能遇到同样问题的人留下答案。
我创建了一个函数initializeLogging()
private static void initializeLogging()
{
//Getting the current timestamp to use in log file naming
Calendar calendar = Calendar.getInstance();
java.text.DateFormat df = new java.text.SimpleDateFormat("yyMMddHHmmss");
String timestamp = df.format(calendar.getTime());
ConfigurationBuilder< BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.ALL);
builder.setConfigurationName("RollingBuilder");
// create a console appender
AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target",
ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout")
.addAttribute("pattern", "<%d{yyyy/MM/dd HH:mm:ss}> %p (%t). %m%n"));
builder.add(appenderBuilder);
// create a rolling file appender
LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout")
.addAttribute("pattern", "<%d{yyyy/MM/dd HH:mm:ss}> %p (%t). %m%n");
ComponentBuilder triggeringPolicy = builder.newComponent("Policies")
.addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "100M"));
//specifying log file name as well ss log file name if the first exceeds maximum size => 100M
appenderBuilder = builder.newAppender("rolling", "RollingFile")
.addAttribute("fileName", "logs/myLogging" + "_" + timestamp + ".log")
.addAttribute("FilePattern","logs/myLogging"+"_"+ timestamp + "%d{yyyyMMddHHmmss}" + ".log")
.add(layoutBuilder)
.addComponent(triggeringPolicy);
builder.add(appenderBuilder);
// create the new logger
builder.add(builder.newLogger("myLogger", Level.ALL)
.add(builder.newAppenderRef("rolling"))
.addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.ALL)
.add(builder.newAppenderRef("rolling")));
LoggerContext ctx = Configurator.initialize(builder.build());
}
所以这个函数的作用是在日志的每个条目上给出一个模式,并将日志指向我指定的文件。现在,每当我想记录某些内容时,我只需要调用Logger logger = LogManager.getLogger('myLogger)
所以它只是一个快速编程的log4j初始化。