diff --git a/src/main.rs b/src/main.rs
index 1a69af698eabe72c4f66bb0168fa6b977bc4d73f..81c40385f484a2eca4784642954ee81169e28111 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -267,15 +267,28 @@ fn picolib_setup(args: &args::Run) {
         .unwrap();
     }
 
+    #[derive(::tarantool::tlua::LuaRead, Default, Clone, Copy)]
+    enum Justify {
+        Left,
+        #[default]
+        Center,
+        Right,
+    }
     #[derive(::tarantool::tlua::LuaRead)]
     struct RaftLogOpts {
         return_string: Option<bool>,
+        justify_contents: Option<Justify>,
     }
     luamod.set(
         "raft_log",
         tlua::function1(
             |opts: Option<RaftLogOpts>| -> traft::Result<Option<String>> {
-                let return_string = opts.and_then(|o| o.return_string).unwrap_or(false);
+                let mut return_string = false;
+                let mut justify_contents = Default::default();
+                if let Some(opts) = opts {
+                    return_string = opts.return_string.unwrap_or(false);
+                    justify_contents = opts.justify_contents.unwrap_or_default();
+                }
                 let header = ["index", "term", "lc", "contents"];
                 let [index, term, lc, contents] = header;
                 let mut rows = vec![];
@@ -318,40 +331,48 @@ fn picolib_setup(args: &args::Run) {
 
                 use std::io::Write;
                 let mut buf: Vec<u8> = Vec::with_capacity(512);
+                let write_contents = move |buf: &mut Vec<u8>, contents: &str| match justify_contents
+                {
+                    Justify::Left => writeln!(buf, "{contents: <cw$}|"),
+                    Justify::Center => writeln!(buf, "{contents: ^cw$}|"),
+                    Justify::Right => writeln!(buf, "{contents: >cw$}|"),
+                };
+
                 let row_sep = |buf: &mut Vec<u8>| {
-                    writeln!(buf, "+{0:-^iw$}+{0:-^tw$}+{0:-^lw$}+{0:-^cw$}+", "").unwrap()
+                    match justify_contents {
+                        Justify::Left => {
+                            writeln!(buf, "+{0:-^iw$}+{0:-^tw$}+{0:-^lw$}+{0:-<cw$}+", "")
+                        }
+                        Justify::Center => {
+                            writeln!(buf, "+{0:-^iw$}+{0:-^tw$}+{0:-^lw$}+{0:-^cw$}+", "")
+                        }
+                        Justify::Right => {
+                            writeln!(buf, "+{0:-^iw$}+{0:-^tw$}+{0:-^lw$}+{0:->cw$}+", "")
+                        }
+                    }
+                    .unwrap()
                 };
                 row_sep(&mut buf);
-                writeln!(
-                    buf,
-                    "|{index: ^iw$}|{term: ^tw$}|{lc: ^lw$}|{contents: ^cw$}|"
-                )
-                .unwrap();
+                write!(buf, "|{index: ^iw$}|{term: ^tw$}|{lc: ^lw$}|").unwrap();
+                write_contents(&mut buf, contents).unwrap();
                 row_sep(&mut buf);
                 for [index, term, lc, contents] in rows {
                     if contents.len() <= cw {
-                        writeln!(
-                            buf,
-                            "|{index: ^iw$}|{term: ^tw$}|{lc: ^lw$}|{contents: ^cw$}|"
-                        )
-                        .unwrap();
+                        write!(buf, "|{index: ^iw$}|{term: ^tw$}|{lc: ^lw$}|").unwrap();
+                        write_contents(&mut buf, &contents).unwrap();
                     } else {
-                        writeln!(
-                            buf,
-                            "|{index: ^iw$}|{term: ^tw$}|{lc: ^lw$}|{contents: ^cw$}|",
-                            contents = &contents[..cw],
-                        )
-                        .unwrap();
+                        write!(buf, "|{index: ^iw$}|{term: ^tw$}|{lc: ^lw$}|").unwrap();
+                        write_contents(&mut buf, &contents[..cw]).unwrap();
                         let mut rest = &contents[cw..];
                         while !rest.is_empty() {
                             let clamped_cw = usize::min(rest.len(), cw);
-                            writeln!(
+                            write!(
                                 buf,
-                                "|{blank: ^iw$}|{blank: ^tw$}|{blank: ^lw$}|{contents: ^cw$}|",
+                                "|{blank: ^iw$}|{blank: ^tw$}|{blank: ^lw$}|",
                                 blank = "~",
-                                contents = &rest[..clamped_cw],
                             )
                             .unwrap();
+                            write_contents(&mut buf, &rest[..clamped_cw]).unwrap();
                             rest = &rest[clamped_cw..];
                         }
                     }