Update from OpenOlat 10.x.x to any newer Version of OpenOlat

This guide has been designed with our installation manual in mind. You should think about what data to backup if you didn't use those guides. A backup is mandatory!

It is normally no problem to skip some (major/minor) versions; an upgrade from 10.0.0 to 15.3.5 should work as well as an upgrade from 15.2.0 to 15.2.1, it will simply take more time to finish.




  1. Stop Tomcat (~/stop)
  2. Backup
    • your olatdata
    • make a database dump
  3. Download the new openolat_xxx.war from https://www.openolat.com to your ~/downloads directory
  4. Extract the openolat_xxx.war to ~/openolat-x.x.x (unzip -d ~/openolat-x.x.x ~/downloads/openolat_xxx.war)
  5. Remove link from last version to webapp (rm ~/webapp)
  6. Create symlink from new version to webapp (ln -s ~/openolat-x.x.x ~/webapp)
  7. If you have a custom theme, take care of updating it (~/olatdata/customizing/themes/*)

Special considerations

If you are upgrading from any version lower than 14.x.x to a version 14.x.x or higher, you will need to also upgrade from log4j to log4j2. An example for a log4j2.xml can be found at the end of this manual in the appendix. Adapt it to your needs.

If you are upgrading from any version lower than 15.3.x to a version 15.3.x or higher, you will need to also upgrade to Tomcat 9 and Java 11. Additionally, remove the following line from your ~/bin/setenv.sh:

-Djava.endorsed.dirs=./common/endorsed                 \


  1. Start tomcat (~/start) and look at
    • catalina.out (tail -f ~/logs/catalina.out)
    • olat.log (tail -f ~/logs/olat.log)
    • First startup might take a while because of file and database upgrades
    • Do NOT shutdown until OpenOlat did the initial startup!
  2. Let everybody know you just updated to the newest version of OpenOlat x.x.x (twitter, facebook etc)
  3. Have a drink and celebrate, but do so responsibly! ;-)


log4j2 for OpenOlat 14.x.x and newer

Create the file ~/lib/log4j2.xml containing the following and adapt it to your file structure and needs.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
       <RollingFile name="RollingFile" fileName="/home/openolat/logs/olat.log"
                   pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %marker %c{1} ^%%^ I%X{ref}-J%sn ^%%^ %logger{36} ^%%^ %X{identityKey} ^%%^  %X{ip} ^%%^ %X{referer} ^%%^ %X{userAgent} ^%%^ %msg%ex{full,separator( )}%n" />
               <TimeBasedTriggeringPolicy interval="1" />
       <Logger name="org.apache.commons.httpclient" additivity="false" level="warn">
           <AppenderRef ref="RollingFile" />
       <Logger name="org.apache.pdfbox" additivity="false" level="fatal">
           <AppenderRef ref="RollingFile" />
       <Logger name="org.apache.fontbox" additivity="false" level="fatal">
           <AppenderRef ref="RollingFile" />
       <Logger name="org.hibernate.engine.internal.StatisticalLoggingSessionEventListener" additivity="false" level="fatal">
           <AppenderRef ref="RollingFile" />
       <!-- Change the level to debug to see the SQL statements generated by Hibernate -->
       <Logger name="org.hibernate.SQL" additivity="false" level="fatal">
           <AppenderRef ref="RollingFile" />
       <Logger name="org.hibernate.type.descriptor.sql.BasicBinder" additivity="false" level="fatal">
           <AppenderRef ref="RollingFile" />
       <Root level="info">
           <AppenderRef ref="RollingFile" />