diff --git a/ippisite/ippidb/admin.py b/ippisite/ippidb/admin.py
index 10ced876180be13ee0d6aabc6dda5946331ea94d..6d74615ad32d3e85b1635b09a93a7cfead810fd6 100644
--- a/ippisite/ippidb/admin.py
+++ b/ippisite/ippidb/admin.py
@@ -12,6 +12,7 @@ from django.contrib.contenttypes.models import ContentType
 from django.db.models import Q
 from django.utils.html import format_html
 from django.utils.translation import ugettext, ugettext_lazy
+from django.utils.safestring import mark_safe
 
 from .models import (
     Bibliography,
@@ -70,6 +71,7 @@ class JobModelAdmin(admin.ModelAdmin):
         "task_result_status",
         "task_result_date_created",
         "task_result_date_done",
+        "logs",
     )
     list_filter = (
         "task_result__status",
@@ -82,6 +84,7 @@ class JobModelAdmin(admin.ModelAdmin):
         "task_result_status",
         "task_result_date_created",
         "task_result_date_done",
+        "logs",
     )
     search_fields = (
         "task_result__task_name",
@@ -95,6 +98,12 @@ class JobModelAdmin(admin.ModelAdmin):
         ("std_out", "std_err"),
     )
 
+    def logs(self, obj):
+        url = reverse("admin:tasklog")
+        return mark_safe(
+            "<a target='_blank' href='{}?jobid={}'>see log</a>".format(url, obj.id)
+        )
+
     def task_result_task_id(self, x):
         return x.task_result.task_id
 
diff --git a/ippisite/ippidb/static/css/ippidb-admin.css b/ippisite/ippidb/static/css/ippidb-admin.css
new file mode 100644
index 0000000000000000000000000000000000000000..bdf98c6a71fd33243c212b9a60664920127c6302
--- /dev/null
+++ b/ippisite/ippidb/static/css/ippidb-admin.css
@@ -0,0 +1,7 @@
+.colMS {
+    width: 100% !important;
+}
+
+.card {
+    width: 100% !important;
+}
\ No newline at end of file
diff --git a/ippisite/ippidb/static/js/ippidb-admin.js b/ippisite/ippidb/static/js/ippidb-admin.js
new file mode 100644
index 0000000000000000000000000000000000000000..2834ea0b3f235744ee88c6279c88af29d4ab7442
--- /dev/null
+++ b/ippisite/ippidb/static/js/ippidb-admin.js
@@ -0,0 +1,44 @@
+function get_logs(taskid) {
+    var xhr = new XMLHttpRequest();
+    xhr.open('GET', '/utils/getoutputjob?task_id=' + taskid, true);
+    xhr.onload = function() {
+        const cls = ["border-info", "border-warning", "border-danger"]
+        var outputs = JSON.parse(xhr.response);
+        var auth = document.getElementById('auth');
+        var createtime = document.getElementById('createtime');
+        var updatetime = document.getElementById('updatetime');
+        var traceback = document.getElementById('traceback');
+        var stderr = document.getElementById('stderr');
+        var stdout = document.getElementById('stdout');
+        var status = document.getElementById('status');
+        auth.innerHTML = outputs.task_name + " || " + outputs.task_id;
+        datecreate = new Date(outputs.create_time);
+        createtime.innerHTML = datecreate;
+        status.innerHTML = outputs.status;
+        if (outputs.status == "SUCCESS") {
+            status.closest('div').classList.remove(...cls);
+            status.closest('div').classList.add("border-success");
+        } else if (outputs.status == "FAILURE") {
+            status.closest('div').classList.remove(...cls);
+            status.closest('div').classList.add("border-danger");
+        } else if (outputs.status == "REVOKED") {
+            status.closest('div').classList.remove(...cls);
+            status.closest('div').classList.add("border-warning");
+        } else {
+            status.closest('div').classList.remove(...cls);
+            status.closest('div').classList.add("border-info");
+        };
+        dateupdate = new Date(outputs.complete_time);
+        updatetime.innerHTML = dateupdate;
+        traceback.innerHTML = outputs.traceback;
+        stderr.innerHTML = outputs.std_err;
+        stdout.innerHTML = outputs.std_out;
+    };
+    xhr.send();
+}
+
+(function() {
+    let taskid = String(document.getElementById("loginfo").getAttribute("taskid"));
+    get_logs(taskid);
+    setInterval(get_logs, 2000, taskid);
+})();
\ No newline at end of file
diff --git a/ippisite/ippisite/admin.py b/ippisite/ippisite/admin.py
index fa80270cc631d16abcdc646e8d53df7efa45bc29..dd1a9292a8e817bcec381181cb8a0af904697662 100644
--- a/ippisite/ippisite/admin.py
+++ b/ippisite/ippisite/admin.py
@@ -8,6 +8,8 @@ from ippidb.tasks import (
     launch_plots_computing,
     launch_test_command_caching,
 )
+from django.shortcuts import render
+from ippidb.models import Job
 
 
 class IppidbAdmin(admin.AdminSite):
@@ -36,9 +38,31 @@ class IppidbAdmin(admin.AdminSite):
                 self.admin_view(self.launch_plots_computing_view),
             ),
             path("launch_test_command/", self.admin_view(self.launch_test_command),),
+            path("tasklog/", self.admin_view(self.tasklog), name="tasklog"),
         ]
         return my_urls + urls
 
+    def tasklog(self, request):
+        jobid = request.GET.get("jobid", None)
+        if jobid:
+            try:
+                job = Job.objects.get(id=jobid)
+            except Job.DoesNotExist:
+                messages.add_message(
+                    request,
+                    messages.INFO,
+                    "job with id: {} doesn't exist".format(jobid),
+                )
+                return redirect("/admin/ippidb/job")
+            return render(
+                request,
+                "admin/ippidb/loginfo.html",
+                context={"taskid": job.task_result.task_id},
+            )
+        else:
+            messages.add_message(request, messages.INFO, "Please specify a jobid")
+            return redirect("/admin/ippidb/job")
+
     def launch_test_command(self, request):
         """
         This view launches the task to test jobs
diff --git a/ippisite/templates/admin/ippidb/loginfo.html b/ippisite/templates/admin/ippidb/loginfo.html
new file mode 100644
index 0000000000000000000000000000000000000000..df35c6140ef981b84daef4ec9125c3ee88e27d7b
--- /dev/null
+++ b/ippisite/templates/admin/ippidb/loginfo.html
@@ -0,0 +1,87 @@
+{% extends "admin/index.html" %}
+{% load i18n static %}
+{% block extrahead %}
+{% endblock %}
+
+{% block branding %}
+{{ block.super }}
+{% endblock %}
+
+{% block extrastyle %}
+{{ block.super }}
+<style>
+#content-related{
+    background: none;
+}
+#content-related .module{
+    background: #f8f8f8;
+}
+#site-wide-commands form{
+    margin:15px 7px;
+}
+#site-wide-commands form input {
+    width:100%;
+}
+</style>
+<link rel="stylesheet" href="/static/css/ippidb-admin.css">
+<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
+{% endblock %}
+{% block sidebar %}
+{% endblock %}
+{% block content %}
+<div class="container">
+<div class="row">
+    <div class="card">
+        <div id="name" class="card-header text-center">
+            <h5 class="card-title">Task name and id</h5>
+            <p id="auth" class="card-text">no name no id</p>
+        </div>
+        <div class="card-body">
+          <div class="row">
+            <div class="col border rounded border-info m-1">
+              <h6 class="card-title">Status</h6>
+              <pre>
+              <p id="status" class="card-text">no status</p>
+              </pre>
+            </div>
+            <div class="col border rounded border-danger m-1">
+              <h6 class="card-title">traceback</h6>
+              <pre>
+              <p id="traceback" class="card-text">No traceback</p>
+              </pre>
+            </div>
+          </div>
+          <div class="row">
+            <div class="col border rounded border-info m-1">
+            <h6 class="card-title">Standard output</h6>
+            <pre>
+            <p id="stdout" class="card-text">No standard output</p>
+            </pre>
+            </div>
+            <div class="col border rounded border-warning m-1">
+            <h6 class="card-title">Error output</h6>
+            <pre>
+            <p id="stderr" class="card-text">No error output</p>
+            </pre>
+            </div>
+          </div>
+        </div>
+        <div class="card-footer text-muted">
+          <div class="row">
+            <div class="col border rounded border-info m-1">
+                <h6 class="card-title">Create Time</h6>
+                <p id="createtime" class="card-text">no create time</p>
+            </div>
+            <div class="col border rounded border-info m-1">
+                <h6 class="card-title">Update Time</h6>
+                <p id="updatetime" class="card-text">no update time</p>
+            </div>
+          </div>
+        </div>
+    </div>
+</div>
+</div>
+<script id="loginfo" src="/static/js/ippidb-admin.js" taskid="{{taskid}}">
+</script>
+{% endblock %}
+