2017-02-24 14 views
2

はじめメイクは、私は今、いくつかの時間のため、この修正プログラムを探しているが、運これまでしてきた

Mavenプロジェクトでのlog4jで特定のファイルにTomcatのログを埋め込まれました。私はサーブレットとして埋め込まれたTomcatを使用するJava webappを構築しています。私はメインのロガーとしてlog4jを設定しました。 Tomcatが組み込まれているので、SOや他のフォーラムを通して私が見てきたこのcatalina.outファイルを見つけることができません。

問題

は、私が欲しいのはTomcatが、私は全体のWebアプリケーションのログに使用するのと同じファイルへのlog4jでログインすることです。これどうやってするの?プログラムでこれを行う方法はありますか?

P.S.: 私はOSとして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プロジェクト内にconfディレクトリを持たないtomcatディレクトリを取得します。それは作業ディレクトリしか持っていません。私はlogging.propertiesファイルを探してみましたが見つかりませんでした。また、これはlog4jでログに記録されません。プログラムでこれを行うことは可能ですか? – catchiecop

関連する問題