diff --git a/vlttng/profiles/lttng-ust-log4j2-agent.yml b/vlttng/profiles/lttng-ust-log4j2-agent.yml new file mode 100644 index 0000000..1991931 --- /dev/null +++ b/vlttng/profiles/lttng-ust-log4j2-agent.yml @@ -0,0 +1,3 @@ +projects: + lttng-ust: + configure: '--enable-java-agent-log4j2' diff --git a/vlttng/venv.py b/vlttng/venv.py index 33d62a1..348afd8 100644 --- a/vlttng/venv.py +++ b/vlttng/venv.py @@ -207,6 +207,10 @@ def tar_x(self, path, output_name): _sq(output_name)) self.run(cmd) + def unzip(self, path, output_name): + cmd = 'unzip -d {} {}'.format(_sq(output_name), _sq(path)) + self.run(cmd) + def rm_rf(self, path): # some basic protection no_rm_dirs = ( @@ -288,6 +292,11 @@ def share_java(self): def log4j_jar(self): return os.path.join(self.share_java, 'log4j.jar') + @property + def log4j2_jars(self): + jars = ['log4j-api.jar', 'log4j-core.jar', 'log4j-1.2-api.jar'] + return [os.path.join(self.share_java, 'log4j2', f) for f in jars] + def project_src(self, name): return os.path.join(self.src, name) @@ -309,6 +318,7 @@ def project(self): class VEnvCreator: _LOG4J_NAME = 'log4j-1.2.17' + _LOG4J2_NAME = 'log4j2-2.22.1' def __init__(self, path, profile, force, verbose, jobs, hide_export): self._paths = _Paths(os.path.abspath(path)) @@ -440,7 +450,7 @@ def _create_project_instructions_lttng_tools(self, project): def _create_project_instructions_lttng_ust(self, project): instructions = self._create_project_instructions_generic_autotools(project) instructions.add_env = { - 'CLASSPATH': self._paths.log4j_jar, + 'CLASSPATH': ":".join([self._paths.log4j_jar] + self._paths.log4j2_jars), } return instructions @@ -719,7 +729,7 @@ def _build_lttng_ust(self): log4j_jar = '{}.jar'.format(log4j_name) _pinfo('Download Apache log4j') self._runner.cd(self._paths.src) - self._runner.wget('http://apache.mirror.gtcomm.net/logging/log4j/1.2.17/{}'.format(log4j_tarball), + self._runner.wget('https://dlcdn.apache.org/logging/log4j/1.2.17/{}'.format(log4j_tarball), log4j_tarball) # extract @@ -730,6 +740,26 @@ def _build_lttng_ust(self): self._runner.cp_rv(os.path.join(log4j_name, log4j_jar), self._paths.log4j_jar) + if '--enable-java-agent-all' in project.configure or '--enable-java-agent-log4j2' in project.configure: + log4j2_version = '2.22.1' + log4j2_name = 'log4j-{}'.format(log4j2_version) + log4j2_zipfile = 'apache-{}-bin.zip'.format(log4j2_name) + _pinfo('Download Apache Log4j 2') + self._runner.cd(self._paths.src) + self._runner.wget('https://archive.apache.org/dist/logging/log4j/{}/{}'.format(log4j2_version, + log4j2_zipfile), + log4j2_zipfile) + + # extract + self._runner.mkdir_p(log4j2_name) + self._runner.unzip(log4j2_zipfile, log4j2_name) + + # install + self._runner.mkdir_p(os.path.dirname(self._paths.log4j2_jars[0])) + for dest_jar in self._paths.log4j2_jars: + src_jar = os.path.basename(dest_jar).replace('.jar', '-{}.jar'.format(log4j2_version)) + self._runner.cp_rv(os.path.join(log4j2_name, src_jar), dest_jar) + self._build_project('lttng-ust') def _get_build_env_from_instructions(self, instructions): diff --git a/vlttng/vlttng_quick_cli.py b/vlttng/vlttng_quick_cli.py index dbadbdb..1b47d1a 100644 --- a/vlttng/vlttng_quick_cli.py +++ b/vlttng/vlttng_quick_cli.py @@ -84,10 +84,11 @@ class _WizardState(enum.Enum): ASK_LTTNG_TOOLS_PYTHON = 7 ASK_LTTNG_UST_JUL_AGENT = 8 ASK_LTTNG_UST_LOG4J_AGENT = 9 - ASK_LTTNG_UST_PYTHON_AGENT = 10 - ASK_PYTHON_INTERPRETER = 11 - ASK_PATH = 12 - END = 13 + ASK_LTTNG_UST_LOG4J2_AGENT = 10 + ASK_LTTNG_UST_PYTHON_AGENT = 11 + ASK_PYTHON_INTERPRETER = 12 + ASK_PATH = 13 + END = 14 class _Wizard: @@ -107,6 +108,7 @@ def __init__(self): _WizardState.ASK_LTTNG_TOOLS_PYTHON: self._state_ask_lttng_tools_python, _WizardState.ASK_LTTNG_UST_JUL_AGENT: self._state_ask_lttng_ust_jul_agent, _WizardState.ASK_LTTNG_UST_LOG4J_AGENT: self._state_ask_lttng_ust_log4j_agent, + _WizardState.ASK_LTTNG_UST_LOG4J2_AGENT: self._state_ask_lttng_ust_log4j2_agent, _WizardState.ASK_LTTNG_UST_PYTHON_AGENT: self._state_ask_lttng_ust_python_agent, _WizardState.ASK_PYTHON_INTERPRETER: self._state_ask_python_interpreter, _WizardState.ASK_PATH: self._state_ask_path, @@ -410,7 +412,7 @@ def _state_ask_lttng_ust_jul_agent(self): def _state_ask_lttng_ust_log4j_agent(self): if 'lttng-ust' not in self._projects: - self._state = _WizardState.ASK_LTTNG_UST_PYTHON_AGENT + self._state = _WizardState.ASK_LTTNG_UST_LOG4J2_AGENT return print(_cquestion('Would you like to build the LTTng-UST log4j agent?')) @@ -419,6 +421,20 @@ def _state_ask_lttng_ust_log4j_agent(self): if self._get_yes_no(False): self._profiles.append('lttng-ust-log4j-agent') + print() + self._state = _WizardState.ASK_LTTNG_UST_LOG4J2_AGENT + + def _state_ask_lttng_ust_log4j2_agent(self): + if 'lttng-ust' not in self._projects: + self._state = _WizardState.ASK_LTTNG_UST_PYTHON_AGENT + return + + print(_cquestion('Would you like to build the LTTng-UST Log4j 2 agent?')) + print() + + if self._get_yes_no(False): + self._profiles.append('lttng-ust-log4j2-agent') + print() self._state = _WizardState.ASK_LTTNG_UST_PYTHON_AGENT