Format
The log entries are structured as follows:
[DATUM, Format: JJJJ-MM-TT][Zeit, Format: HH-MM-SS][Log-Level]{Prozess}[Komponente][Protokoll-Nachricht]
The following log levels are available:
| Log Level | What? | Criticality | Action? |
|---|---|---|---|
| DEBUG | For debugging only | None | None |
| INFO | Information | None | None |
| WARNING | Warning | Low | Check recommended |
| ERROR | Error | High | Check required |
| FATAL | Error which caused a process outage | Very high | Check urgently required |
Example:
2015-01-05 08:15:05 WARN {Camel (camelContext) thread #6 - JmsConsumer[transaction-work-consumer]} [ExchangeRateServiceInternal] Can't find current exchange rate for (businessUnitGroup = 100000000000000004, fromCurrencyCode = USD). Default exchange rate will be used.
If an error occurs, additional hints are displayed in the form of runtime exceptions which must be checked by the development partner, e.g.:
2015-01-05 09:13:01 ERROR {Camel (camelContext) thread #3 - JmsConsumer[transaction-work-consumer]} [DeadLetterLog] Exchange[
, Id: ID-STS-ENT1-56936-1421074174811-0-76771
, ExchangePattern: InOnly
, Properties: {CamelBinding=org.apache.camel.component.jms.JmsBinding@dfb60a7, CamelCorrelationId=ID-STS-ENT1-56936-1421074174811-0-76768, CamelCreatedTimestamp=Tue Jan 13 09:13:00 CET 2015, CamelExceptionCaught=org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only, CamelExternalRedelivered=false, CamelFailureEndpoint=bean://transactionBulkExporterPoslogRoute?method=exportTransactions, CamelFailureRouteId=com.gk_software.gkr.tx_pool.internal.process.transactionGroupProcessor, CamelFilterMatched=true, CamelMessageHistory=[DefaultMessageHistory[routeId=com.gk_software.gkr.tx_pool.internal.process.transactionGroupProcessor, node=log3], DefaultMessageHistory[routeId=com.gk_software.gkr.tx_pool.internal.process.transactionGroupProcessor, node=choice1], DefaultMessageHistory[routeId=com.gk_software.gkr.tx_pool.internal.process.transactionGroupProcessor, node=to5], DefaultMessageHistory[routeId=DeadLetterChannel, node=log9], DefaultMessageHistory[routeId=DeadLetterChannel, node=multicast1], DefaultMessageHistory[routeId=DeadLetterChannel, node=to6]], CamelMulticastComplete=false, CamelMulticastIndex=0, CamelToEndpoint=log://DeadLetterLog?level=ERROR&multiline=true&showAll=true}
, Headers: {breadcrumbId=ID-STS-ENT1-56936-1421074174811-0-76764, DiscriminatorType=BusinessUnitGroup, DiscriminatorValue=100000000000000013, JMSCorrelationID=null, JMSDeliveryMode=2, JMSDestination=queue://transaction-work-consumer, JMSExpiration=0, JMSMessageID=ID:STS-ENT1-56938-1421074179385-1:1:10:2067:1, JMSPriority=4, JMSRedelivered=false, JMSReplyTo=null, JMSTimestamp=1421136780097, JMSType=null, JMSXGroupID=null, JMSXUserID=null, TransactionConsumerGroupId=102, WorkPriority=false}
, BodyType: null
, Body: [Body is null]
, CaughtExceptionType: org.springframework.transaction.UnexpectedRollbackException, CaughtExceptionMessage: Transaction rolled back because it has been marked as rollback-only, StackTrace: org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:717)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:147)
at com.gk_software.gkr.pos_server.server.tx_export.TransactionBulkExporter.exportTransactions(TransactionBulkExporter.java:64)
at com.gk_software.gkr.pos_server.server.tx_export.TransactionBulkExporter.exportTransactions(TransactionBulkExporter.java:49)
at sun.reflect.GeneratedMethodAccessor722.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:407)
at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:278)
at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:251)
at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:166)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105)
at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:67)
at org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:103)
at org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:71)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:110)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
at org.apache.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:111)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87)
at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:103)
at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:560)
at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:498)
at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325)
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:243)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:763)
, Out: null:
]
Log files are permanently written. As soon as a defined file size is reached, the log files are packed and later deleted.
Location for outputs
An application directory will be defined during installation. This application directory includes a /log directory which is used to store the log files.
In Apache Tomcat environments, it is possible to view or change this directory:
GKRETAIL_ROOT_FOLDER/tomcat/conf/Catalina/localhost/pos-server.xml
The default value for the storage location of the log file is, for example, on Linux:
/usr/local/gkretail_local/pos-server0/log
Configuration file name, max. file size, etc.
There are three different log files which can be enabled and disabled independently of each other.
- pos-server.log: Includes all messages of the level INFO and higher
- pos-server-error.log: Includes all messages of the level ERROR and higher
- pos-server-debug.log: Includes all messages, enabled for debugging and tracing only
File name:
- An unpacked log file has the following name, for example: pos-server.log
- Unpacked log files have the following name, for example: pos-server.log-[JJJJMMDD].gz
There are several parameters to influence the storage duration, file size, etc.:
- maxBytes: Max. file size in bytes. If it is exceeded, the file is packed and a new file is created.
- maxCount: Max. number of files. If it is exceeded, the files are deleted.
- maxAge: Max. age of files (in days). If it is exceeded, the corresponding files are deleted.
Three configuration files exist for the different log files:
- pos-server.log: POS_SERVER_ROOT/config/parameter/root-info-appender.xml
- pos-server-error.log: POS_SERVER_ROOT/config/parameter/root-error-appender.xml
- pos-server-debug.log: POS_SERVER_ROOT/config/parameter/root-appender.xml
Example: Configuration file <POS_SERVER_ROOT>/config/parameter/root-appender.xml:
<param name="maxBytes" value="50485760" />
<param name="maxCount" value="1000" />
<param name="maxAge" value="7d" />
Configuration of outputted log levels
The log level can be set differently for the individual components. Therefore, it can be defined whether outputs of a particular category (=level) are written or not.
The following log levels are available:
- TRACE
- DEBUG
- INFO
- WARNING
- ERROR
- FATAL
If INFO is set, all messages of the level INFO and higher are outputted.
OFF disables the logging completely.
Configuration file POS_SERVER_ROOT/config/parameter/log4j-logging.properties:
log.level.com.gk_software=DEBUG
log.level.gk=DEBUG
Activation
Configuration file POS_SERVER_ROOT/config/parameter/log4j-logging.properties:
appender.root.enabled=true
appender.root.file=root-appender.xml
appender.root-error.enabled=true
appender.root-error.file=root-error-appender.xml
appender.root-info.enabled=true
appender.root-info.file=root-info-appender.xml
Other appenders for NetWeaver tracing should be disabled:
# SAP NetWeaver Tracing Appenders
appender.sap_api.enabled=false
appender.sap_api.file=sap-api-appender.xml
Log output on the console
In the configuration file, it is possible to set the messages which are displayed on the console.
In Tomcat, these messages are written to the Tomcat log. Messages are not redirected to this log, by default. The values for the setting are:
- true = Output suppressed
- false = Output allowed
Configuration file POS_SERVER_ROOT/config/parameter/log4j-logging.properties:
drop.appender.GK_STDOUT.enabled=true
drop.appender.GK_STDERR.enabled=true