diff --git a/web/libs/js/main.dash2.js b/web/libs/js/main.dash2.js
index 63e227d6..2d9e6558 100644
--- a/web/libs/js/main.dash2.js
+++ b/web/libs/js/main.dash2.js
@@ -12,6 +12,20 @@ $.ccio={
     fr:$('#files_recent'),
     mon:{}
 };
+$.ccio.downloadJSON = function(jsonToDownload,filename,errorResponse){
+    var arr = jsonToDownload;
+    if(arr.length===0 && errorResponse){
+        errorResponse.type = 'error'
+        $.ccio.init('note',errorResponse);
+        return
+    }
+    var dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(arr,null,3));
+    $('#temp').html('<a></a>')
+        .find('a')
+        .attr('href',dataStr)
+        .attr('download',filename)
+        [0].click()
+}
 $.ccio.timeObject = function(time,isUTC){
     if(isUTC === true){
         return moment(time).utc()
@@ -2844,7 +2858,8 @@ $.pB.e.find('.stop').click(function(e){
 $.log = {
     e : $('#logs_modal'),
     lm : $('#log_monitors'),
-    dateRange : $('#logs_daterange')
+    dateRange : $('#logs_daterange'),
+    loaded : {}
 }
 $.log.dateRange.daterangepicker({
     startDate:$.ccio.timeObject().subtract(moment.duration("5:00:00")),
@@ -2868,19 +2883,23 @@ $.log.e.on('shown.bs.modal', function () {
     $.log.lm.change()
 })
 $.log.lm.change(function(){
-    e = {}
+    e = {
+        _this : this
+    }
     e.v = $(this).val();
     if(e.v === 'all'){
         e.v=''
     }
-    e.dateRange=$.log.dateRange.data('daterangepicker');
-    e.dateRange={startDate:e.dateRange.startDate,endDate:e.dateRange.endDate}
-    var url = $.ccio.init('location',$user)+$user.auth_token+'/logs/'+$user.ke+'/'+e.v+'?start='+$.ccio.init('th',e.dateRange.startDate)+'&end='+$.ccio.init('th',e.dateRange.endDate)
-    console.log(url)
+    e.dateRange = $.log.dateRange.data('daterangepicker');
+    $.log.loaded.startDate = e.dateRange.startDate
+    $.log.loaded.endDate = e.dateRange.endDate
+    var url = $.ccio.init('location',$user)+$user.auth_token+'/logs/'+$user.ke+'/'+e.v+'?start='+$.ccio.init('th',$.log.loaded.startDate)+'&end='+$.ccio.init('th',$.log.loaded.endDate)
     $.get(url,function(d){
+        $.log.loaded.url = url
+        $.log.loaded.query = $(e._this).val()
+        $.log.loaded.rows = d
         e.tmp='';
         $.each(d,function(n,v){
-            
             e.tmp+='<tr class="search-row"><td title="'+v.time+'" class="livestamp"></td><td>'+v.time+'</td><td>'+v.mid+'</td><td>'+$.ccio.init('jsontoblock',v.info)+'</td></tr>'
         })
         $.log.table.find('tbody').html(e.tmp)
@@ -2888,6 +2907,12 @@ $.log.lm.change(function(){
         $.ccio.init('ls')
     })
 })
+$.log.e.find('[download]').click(function(){
+    $.ccio.downloadJSON($.log.loaded,'Shinobi_Logs_'+(new Date())+'.json',{
+        title : 'No Logs Found',
+        text : 'No file will be downloaded.',
+    })
+})
 //multi monitor manager
 $.multimon={e:$('#multi_mon')};
 $.multimon.table=$.multimon.e.find('.tableData tbody');
diff --git a/web/pages/blocks/logs.ejs b/web/pages/blocks/logs.ejs
index a135f7fd..6cf06ff2 100644
--- a/web/pages/blocks/logs.ejs
+++ b/web/pages/blocks/logs.ejs
@@ -43,6 +43,7 @@
       </div>
       <div class="modal-footer">
         <button type="button" class="btn btn-default pull-left" data-dismiss="modal"><i class="fa fa-times"></i> <%-lang.Close%></button>
+          <button download class="btn btn-info"><%-lang.Export%></button>
           <button onclick="$.log.lm.change()" class="btn btn-success"><%-lang.Check%></button>
       </div>
     </div>