2017-02-24 37 views
2

介绍使Maven项目嵌入的Tomcat日志与log4j的某些文件

我一直在寻找此修复程序有一段时间了,但至今没有运气。我正在构建一个使用嵌入式Tomcat作为servlet的Java web应用程序。我已经将log4j设置为我的主记录器,并将日志发布到指定的文件。由于Tomcat的嵌入我找不到,我已经经历了那么和其他论坛看到这么多的答案,这catalina.out的文件。

问题

我想就是让Tomcat的记录与log4j的,以我使用的日志记录整个Web应用程序相同的文件。我怎样才能做到这一点?有没有办法做到这一点编程?

P.S.: 我使用Windows作为操作系统,Tomcat版本为8.0.30

回答

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的初始化。

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. 
+0

为[CATALINA_HOME]我得到了我的webapp项目tomcat的目录不具有内conf目录。它只有一个工作目录。我试图寻找logging.properties文件,但无法找到它。这也不会记录log4j。有没有可能以编程方式做到这一点? – catchiecop