ホスト名と日付をログファイル名に追加したいので、ログファイル名はapp_hostname.date.logのようにする必要があります。 注:これはlinuxとWindowsの両方で実行できます
<appender name="applog" class="org.Apache.log4j.DailyRollingFileAppender">
<param name="File" value="${path}/app.log" />
<param name="MaxFileSize" value="1MB" />
<param name="DatePattern" value=".dd-MM-yyyy" />
<layout class="org.Apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd-MM-yyyy HH:mm:ss}] [%-5p] %m%n"/>
</layout>
</appender>
そして、StringMatchFilter
ではなく、ログパターンに基づいてフィルターを追加する方法。パターンを一致させたい。前もって感謝します
最初にこれをあなたのJavaコードから実行してからlog4jを設定 =アプリケーションに、
注:コードの実行中に必要な例外を処理またはキャッチします。
_// step-1 : set hostName into System's property, which will use by log4j
System.setProperty("hostName", InetAddress.getLocalHost().getHostName());
//step - 2 : set currentDate into System's property, which will use by log4j
System.setProperty("currentDate", new SimpleDateFormat("dd-MMM-yyyy").format(new Date()));
//step - 3 : now configure/load log4j into Application , if it's not still loaded earlier then.
org.Apache.log4j.Logger LOG = Logger.getLogger(YourJavaClassName.class); // ALERT : before this step above 2-step must needs to be execute, otherwise file-name won't appear as you required.
//LOG.debug("anything whatever programmer what to log");
_
更新:
アプリケーションがWebアプリケーションの場合は、ここで必要なプロパティを構成する必要があります_Tomcat-server
_開始後、application
を実行する前に、
そのためには、ApplicationConfiguration
インターフェースが実装された1つのクラスServletContextListener
を作成します。これにより、アプリケーションを実行する前に最初に実行するのに役立ちます。
同様にしてください、
_import Java.net.InetAddress;
import Java.net.UnknownHostException;
import Java.text.SimpleDateFormat;
import Java.util.Date;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ApplicationConfiguration implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
try {
// step-1 : set hostName into System's property, which will use by log4j
System.setProperty("hostName", InetAddress.getLocalHost().getHostName());
//step - 2 : set currentDate into System's property, which will use by log4j
System.setProperty("currentDate", new SimpleDateFormat("dd-MMM-yyyy").format(new Date()));
} catch (UnknownHostException e) {
System.out.println("Error Message : " + e.getMessage());
//e.printStackTrace();
}
}
}
_
…….
log4j.xmlファイルを同様に設定します、
_<appender name="applog" class="org.Apache.log4j.DailyRollingFileAppender">
<param name="File" value="${path}/app_${hostName}.${currentDate}.log" />
<param name="MaxFileSize" value="1MB" />
<param name="DatePattern" value=".dd-MM-yyyy" />
<layout class="org.Apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd-MM-yyyy HH:mm:ss}] [%-5p] %m%n"/>
</layout>
</appender>
_
web.xmlファイルを適宜更新してください。
_<web-app ...>
<listener>
<listener-class>
com.pck1.ApplicationConfiguration
</listener-class>
</listener>
</web-app>
_
この構成は_
web.xml
_に適用する必要があります。アプリケーションが起動すると、この構成によってコンテキストリスナーのようにそれに従います。
更新2:
_<logger name="packageName.AAA" additivity="false" >
<level value="INFO" />
<appender-ref ref="applog"/>
</logger>
_
Log4j2 documentation に続いて、環境変数のルックアップを実行できるため、Unixのようなシステムではこれが機能するはずです。
<Property name="MYHOST">${env:HOSTNAME}</Property>
<Appenders>
<File name="File1" fileName="${MYHOST}_file.log">
...
</File>
</Appenders>
$ HOSTNAMEは常にデフォルトで使用できるとは限らず、シェルで明示的にエクスポートする必要がある場合があることに注意してください。 この投稿 を参照してください。
次の設定はトリックを行います
<appender name="file" class="org.Apache.log4j.RollingFileAppender">
<param name="append" value="false" />
<param name="maxFileSize" value="10MB" />
<param name="maxBackupIndex" value="10" />
<param name="file" value="C:\\Users\\kavurira\\Desktop\\log4j-${HostName}.log" />
<layout class="org.Apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m${HostName}%n" />
</layout>
</appender>
Just set "HostName" as system property, before initialization of Log4j.
System.setProperty("HostName", InetAddress.getLocalHost().getHostName());
システムプロパティhostname
を定義して、構成を変更できます。
<param name="File" value="${path}/app_${hostname}.log" />
Log4jを初期化する前に、システムプロパティが設定されていることを確認してください。
フィルターの追加については、回答を参照してください 一致するパターンでログをフィルター-log4j
更新:異なるログを書き込むための簡単な解決策:
<logger name="com"><!-- for Class Package is com.???... -->
<level value="INFO" />
<appender-ref ref="applog" />
</logger>
<logger name="loggerForCustomClass">
<level value="INFO" />
<appender-ref ref="customlog" />
</logger>
プログラムのコードを変更します。
//message will write to "customlog" appender
Logger.getLogger("loggerForCustomClass").info("log from custom class");
//message will write to "applog" appender
Logger.getLogger(getClass()).info("log from other class");
基本的なアペンダーを拡張する独自のカスタムアペンダーを記述します。これは、Javaでプロパティを操作するのに役立ちます。
この回答を参照 https://stackoverflow.com/a/1324075/1594992
または単にこの答えのようにコマンドライン引数とシステムプロパティを設定します