私は2つのアプリケーションAとBを実行しています。Bはランタイムに依存しています。両方のアプリケーションにはログファイル名とその他の情報を含むlog4j2.xmlファイル。異なるlog4j2.xmlを持つ2つのアプリケーションが同じログファイルにログインしようとしています
Bにはプリインストールスクリプトがあり、Aの前に 'root'ユーザによって実行されます。独自のログファイルを作成します。b_log.log Aが起動すると、独自のログファイルを作成するのではなくb_log.logにログインしようとします。 Aは別のユーザー 'a_user'によって開始されます。だから、Aは 'root'によって作成されたb_log.logにアクセスしてログインすることができないので、 'permission denied'というエラーが出る。どちらのログファイルも、RollingRandomAccessFileアペンダを使用します。
両方のアプリケーションを別々のログファイルにログインさせるにはどうすればよいですか?別のlog4j2.xmlを提供することはできません。アプリケーションAの
log4j2.xml:アプリケーションBの
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<RollingRandomAccessFile name="ApplicationFile" fileName="${sys:logPath}/log_a.log"
filePattern="${sys:logPath}/log_a.log".%d{yyyy-MM-dd-HH}">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%-5level] (%t) %X{sessionId} %c{1}: %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="ApplicationFile"/>
</Root>
<!-- Loggers explicitly defined here, so their levels could be adjusted in runtime via JMX -->
<Logger name="com.xyz.a.package" level="INFO" />
</Loggers>
</Configuration>
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<RollingRandomAccessFile name="LogB" fileName="${sys:logPath}/log_b.log"
filePattern="$${sys:logPath}/log_b.log.%d{yyyy-MM-dd-HH}">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%-5level] (%t) %X{sessionId} %c{1}: %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Logger name="com.xyz.b.package" level="INFO" additivity="false">
<AppenderRef ref="LogB"/>
</Logger>
</Loggers>
</Configuration>
アプリケーションAがb_logにアクセスすることができないことを例外:
2017-03-12 07:42:37,197 main ERROR Cannot access RandomAccessFile java.io.FileNotFoundException: /app/env/Service/var/output/logs/log_b.log (Permission denied) java.io.FileNotFoundException: /app/env/Service/var/output/logs/log_b.log (Permission denied)
at java.io.RandomAccessFile.open0(Native Method)
at java.io.RandomAccessFile.open(RandomAccessFile.java:316)
at java.io.RandomAccessFile.(RandomAccessFile.java:243)
at java.io.RandomAccessFile.(RandomAccessFile.java:124)
at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager$RollingRandomAccessFileManagerFactory.createManager(RollingRandomAccessFileManager.java:176)
at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager$RollingRandomAccessFileManagerFactory.createManager(RollingRandomAccessFileManager.java:149)
at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:73)
at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:81)
at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.getRollingRandomAccessFileManager(RollingRandomAccessFileManager.java:82)
at org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.createAppender(RollingRandomAccessFileAppender.java:207)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:132)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:918)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:858)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:850)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:479)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:219)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:231)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:496)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:566)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:582)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:217)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:122)
at org.apache.logging.log4j.jul.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:34)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
at org.apache.logging.log4j.jul.LogManager.getLogger(LogManager.java:89)
at java.util.logging.LogManager.demandLogger(LogManager.java:551)
at java.util.logging.Logger.demandLogger(Logger.java:455)
at java.util.logging.Logger.getLogger(Logger.java:502)
at com.sun.jmx.remote.util.ClassLogger.(ClassLogger.java:55)
at sun.management.jmxremote.ConnectorBootstrap.(ConnectorBootstrap.java:846)
at sun.management.Agent.startAgent(Agent.java:257)
at sun.management.Agent.startAgent(Agent.java:447)
2017-03-12 07:42:37,209 main ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender for element RollingRandomAccessFile. java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2つのアプリケーションで同じログファイルを使用するのは悪い方法です。 –
ここに実際に質問は表示されません。あなたは何を知りたいですか? – rgoers